1. 程式人生 > >Go基礎程式設計:HTTP程式設計

Go基礎程式設計:HTTP程式設計

Go語言標準庫內建提供了net/http包,涵蓋了HTTP客戶端和服務端的具體實現。使用net/http包,我們可以很方便地編寫HTTP客戶端或服務端的程式。

1 HTTP服務端

示例程式碼:

package main

import (
    "fmt"
    "net/http"
)

//服務端編寫的業務邏輯處理程式
//hander函式: 具有func(w http.ResponseWriter, r *http.Requests)簽名的函式
func myHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Println
(r.RemoteAddr, "連線成功") //r.RemoteAddr遠端網路地址 fmt.Println("method = ", r.Method) //請求方法 fmt.Println("url = ", r.URL.Path) fmt.Println("header = ", r.Header) fmt.Println("body = ", r.Body) w.Write([]byte("hello go")) //給客戶端回覆資料 } func main() { http.HandleFunc("/go", myHandler) //該方法用於在指定的 TCP 網路地址 addr 進行監聽,然後呼叫服務端處理程式來處理傳入的連線請求。 //該方法有兩個引數:第一個引數 addr 即監聽地址;第二個引數表示服務端處理程式,通常為空 //第二個引數為空意味著服務端呼叫 http.DefaultServeMux
進行處理 http.ListenAndServe("127.0.0.1:8000", nil) }

瀏覽器輸入url地址:
這裡寫圖片描述

伺服器執行結果:
這裡寫圖片描述

2 HTTP客戶端

package main

import (
    "fmt"
    "io"
    "log"
    "net/http"
)

func main() {

    //get方式請求一個資源
    //resp, err := http.Get("http://www.baidu.com")
    //resp, err := http.Get("http://www.neihan8.com/article/index.html")
resp, err := http.Get("http://127.0.0.1:8000/go") if err != nil { log.Println(err) return } defer resp.Body.Close() //關閉 fmt.Println("header = ", resp.Header) fmt.Printf("resp status %s\nstatusCode %d\n", resp.Status, resp.StatusCode) fmt.Printf("body type = %T\n", resp.Body) buf := make([]byte, 2048) //切片緩衝區 var tmp string for { n, err := resp.Body.Read(buf) //讀取body包內容 if err != nil && err != io.EOF { fmt.Println(err) return } if n == 0 { fmt.Println("讀取內容結束") break } tmp += string(buf[:n]) //累加讀取的內容 } fmt.Println("buf = ", string(tmp)) }

參考資料