您好,登錄后才能下訂單哦!
這篇文章給大家介紹golang中如何使用 net/http 庫 ,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
1、net/http庫分為客戶端和服務器兩部分,庫中的結構和函數有些只支持客戶端和服務器這兩者之一,有的同時支持這兩種。
1)Client、Response、header、Request 和 Cookie 對客戶端進行支持
2)Server、ServerMux、Handler/HandleFunc、ResponseWriter、Header、Request和Cookie則對服務器進行支持
2、go 創建服務器
1) func ListenAndServe(addr string, handler Handler) error
使用指定的監聽地址和處理器啟動一個HTTP服務端。 ListenAndServe監聽TCP地址addr,并且會使用handler參數調用Serve函數處理接收到的連接。handler參數一般會設為nil,此時會使用DefaultServeMux。 eg
package main import ( "io" "net/http" "log" ) // hello world, the web server func HelloServer(w http.ResponseWriter, req *http.Request) { io.WriteString(w, "hello, world!\n") } func main() { http.HandleFunc("/hello", HelloServer) err := http.ListenAndServe(":12345", nil) if err != nil { log.Fatal("ListenAndServe: ", err) } }
2)type Server
要管理服務端的行為,可以創建一個自定義的Server。Server 結構可以對服務器進行更詳細的配置,eg
type Server struct { Addr string // 監聽的TCP地址,如果為空字符串會使用":http" Handler Handler // 調用的處理器,如為nil會調用http.DefaultServeMux ReadTimeout time.Duration // 請求的讀取操作在超時前的最大持續時間 WriteTimeout time.Duration // 回復的寫入操作在超時前的最大持續時間 MaxHeaderBytes int // 請求的頭域最大長度,如為0則用DefaultMaxHeaderBytes TLSConfig *tls.Config // 可選的TLS配置,用于ListenAndServeTLS方法 // TLSNextProto(可選地)指定一個函數來在一個NPN型協議升級出現時接管TLS連接的所有權。 // 映射的鍵為商談的協議名;映射的值為函數,該函數的Handler參數應處理HTTP請求, // 并且初始化Handler.ServeHTTP的*Request參數的TLS和RemoteAddr字段(如果未設置)。 // 連接在函數返回時會自動關閉。 TLSNextProto map[string]func(*Server, *tls.Conn, Handler) // ConnState字段指定一個可選的回調函數,該函數會在一個與客戶端的連接改變狀態時被調用。 // 參見ConnState類型和相關常數獲取細節。 ConnState func(net.Conn, ConnState) // ErrorLog指定一個可選的日志記錄器,用于記錄接收連接時的錯誤和處理器不正常的行為。 // 如果本字段為nil,日志會通過log包的標準日志記錄器寫入os.Stderr。 ErrorLog *log.Logger // 內含隱藏或非導出字段 }
s := &http.Server{ Addr: ":8080", Handler: myHandler, ReadTimeout: 10 * time.Second, WriteTimeout: 10 * time.Second, MaxHeaderBytes: 1 << 20, } log.Fatal(s.ListenAndServe())
3、HTTPS
1)func ListenAndServeTLS(addr string, certFile string, keyFile string, handler Handler) error
ListenAndServeTLS函數和ListenAndServe函數的行為基本一致,除了它期望HTTPS連接之外。此外,必須提供證書文件和對應的私鑰文件。如果證書是由權威機構簽發的,certFile參數必須是順序串聯的服務端證書和CA證書。如果srv.Addr為空字符串,會使用":https"。 eg
import ( "log" "net/http" ) func handler(w http.ResponseWriter, req *http.Request) { w.Header().Set("Content-Type", "text/plain") w.Write([]byte("This is an example server.\n")) } func main() { http.HandleFunc("/", handler) log.Printf("About to listen on 10443. Go to https://127.0.0.1:10443/") err := http.ListenAndServeTLS(":10443", "cert.pem", "key.pem", nil) if err != nil { log.Fatal(err) } }
程序員可以使用crypto/tls包的generate_cert.go文件來生成cert.pem和key.pem兩個文件。
4、處理器和處理函數
1)處理器就是一個擁有 ServeHTTP 方法的接口。
1、func (mux *ServeMux) ServeHTTP(w ResponseWriter, r *Request) ServeHTTP將請求派遣到與請求的URL最匹配的模式對應的處理器。
2、處理器綁定 http.Handle,http.Handle函數將處理器綁定至 DefaultServeMux。
func (mux *ServeMux) Handle(pattern string, handler Handler) Handle注冊HTTP處理器handler和對應的模式pattern。如果該模式已經注冊有一個處理器,Handle會panic。
2)處理器函數
處理器函數實際上就是與處理器擁有相同行為的函數,即與ServeHTTP 方法擁有相同參數。HandlerFunc func(ResponseWriter, *Request) 通過類型轉換讓我們可以將普通的函數作為HTTP處理器使用。如果f是一個具有適當簽名的函數,HandlerFunc(f)通過調用f實現了Handler接口。
關于golang中如何使用 net/http 庫 就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。