GO 架站 01 | 取回伺服器回傳的資料


從大三接觸Golang到現在,一直沒有實際使用Golang建立什麼作品,想趁大四複習Golang並且用Golang實作個人形象網站或是一個簡單的品牌網站,同時記錄自己開發的歷程(一直很想向大神看齊,寫一系列開發的技術文章)。當然我沒那麼強啦,只是一些自己的學習紀錄而已QQ
本系列文章參考了完全自學!go 語言 (golang) 實戰聖經這本書以及網路上諸多大神的文章,相關參考資料會放在文末,若有疏漏煩請告知,內容有誤也麻煩告知。

實作1 - 對伺服器發送請求並取回資料

首先,我們先來嘗試對線上網站伺服器發送請求。步驟如下:

  1. 建立連線
  2. 確認連線是否成功(Status Code = 200)
  3. 讀取伺服器回傳的 Response
  4. 關閉連線

我們來實作對台科大官網發送 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) 實戰聖經

#golang






你可能感興趣的文章

D56_W7 HW3 任務拆解、寫作業

D56_W7 HW3 任務拆解、寫作業

為手機成癮的外籍看護請一位行動秘書

為手機成癮的外籍看護請一位行動秘書

Day07_Origami學習筆記

Day07_Origami學習筆記






留言討論