從大三接觸Golang到現在,一直沒有實際使用Golang建立什麼作品,想趁大四複習Golang並且用Golang實作個人形象網站或是一個簡單的品牌網站,同時記錄自己開發的歷程(一直很想向大神看齊,寫一系列開發的技術文章)。當然我沒那麼強啦,只是一些自己的學習紀錄而已QQ
本系列文章參考了完全自學!go 語言 (golang) 實戰聖經這本書以及網路上諸多大神的文章,相關參考資料會放在文末,若有疏漏煩請告知,內容有誤也麻煩告知。
實作1 - 對伺服器發送請求並取回資料
首先,我們先來嘗試對線上網站伺服器發送請求。步驟如下:
- 建立連線
- 確認連線是否成功(Status Code = 200)
- 讀取伺服器回傳的 Response
- 關閉連線
我們來實作對台科大官網發送 GET Request
並且輸出其 Response
:
import (
"fmt"
"io"
"net/http"
)
func sendRequestGetData() string {
response, err := http.Get("https://www.ntust.edu.tw/")
if err != nil {
fmt.Println("建立連線出現錯誤!")
return ""
}
defer response.Body.Close()
if response.StatusCode != http.StatusOK {
fmt.Println("建立連線出現錯誤!")
return ""
}
data, err := io.ReadAll(response.Body)
if err != nil {
fmt.Println("讀取資料時出現錯誤!")
return ""
}
return string(data)
}
func main() {
data := sendRequestGetData()
dataByte := []byte(data)
fmt.Println(string(dataByte[0:500]))
// 印出來實在太多了,取前幾個字印出來看看就好
}
從範例程式中可以看到Golang是很講究錯誤處理的語言,幾乎轉換、io都要工程師對err
進行處理(if err!=nil
),雖然工程師寫起來會覺得有點囉嗦,但在後期維護除錯時會非常有用。
上面的程式碼會將從https://www.ntust.edu.tw/
取回的資料印出來,會像這樣:
<!DOCTYPE html>
<html lang="zh-tw">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="initial-scale=1.0, user-scalable=1, minimum-scale=1.0, maximum-scale=3.0">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="keywords" content="國立臺灣科技大學, 國立台灣科技大學,臺科大,
.
.
.
其實就是網站原始碼啦!實際到台科官網按下F12或右鍵檢查,就會看到一模一樣的程式碼。
當我們在網址列輸入 https://www.ntust.edu.tw/
,就是透過瀏覽器對台科官網的伺服器發送名為/
的請求,這時伺服器會找到負責處理網站結尾是/
的程式,把我們發出去的Request給它處理,它便回傳上面那一大堆<!DOCTYPE html>
開頭的東西,透過瀏覽器解析後,就變成我們看到的台科大官網。而書中也是這麼描述的:
「這就是網頁瀏覽器會暗中做的事--從伺服器取得並解讀結構化的資料,然後顯示成網頁。」
完全自學!go 語言 (golang) 實戰聖經
實作2-伺服器回傳JSON資料
在這裡,我們要將剛剛台科官網的網址,換成動物認領養的開放資料API:
func sendRequestGetData() string {
response, err := http.Get("https://data.coa.gov.tw/Service/OpenData/TransService.aspx?UnitId=QcbUEzN6E6DL&$top=20&animal_kind=狗"")
if err != nil {
fmt.Println("建立連線出現錯誤!")
return ""
}
defer response.Body.Close()
//以下省略
}
輸出結果:
{
"animal_id": 199304,
"animal_subid": "PAAAG1100320040",
"animal_area_pkid": 21,
"animal_shelter_pkid": 83,
"animal_place": "澎湖縣流浪動物收容中心",
"animal_kind": "狗",
"animal_sex": "M",
"animal_bodytype": "BIG",
"animal_colour": "黑色",
"animal_age": "",
"animal_sterilization": "F",
.
.
.
回傳的便會是JSON格式的資料!接下來就可以為這些資料建立型別整理起來,後續便可有架構地繼續使用這些資料!(JSON是網路世界非常常用的格式,學會如何處理是很重要的!)
這篇文章到這邊先告一個段落,下一篇將會是有關如何建立一個簡易網站的學習記錄文!
參考資料:完全自學!go 語言 (golang) 實戰聖經