亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

golang中如何使用 net/http 庫

發布時間:2021-07-20 15:12:59 來源:億速云 閱讀:171 作者:Leah 欄目:編程語言

這篇文章給大家介紹golang中如何使用 net/http 庫 ,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

1、net/http庫分為客戶端和服務器兩部分,庫中的結構和函數有些只支持客戶端和服務器這兩者之一,有的同時支持這兩種。

    1)Client、Response、header、Request 和 Cookie 對客戶端進行支持
    2)Server、ServerMux、Handler/HandleFunc、ResponseWriter、Header、Request和Cookie則對服務器進行支持

golang中如何使用 net/http 庫

golang中如何使用 net/http 庫

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 庫 就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

高雄县| 海林市| 玉龙| 乌兰浩特市| 大丰市| 阳城县| 裕民县| 沙坪坝区| 新干县| 射洪县| 宁陕县| 蚌埠市| 望谟县| 阿城市| 开阳县| 东乡| 五家渠市| 南安市| 鄱阳县| 枣阳市| 项城市| 高唐县| 南丹县| 祁阳县| 电白县| 盱眙县| 商水县| 铜山县| 手游| 读书| 灵川县| 霍邱县| 元谋县| 慈溪市| 图木舒克市| 山阳县| 如皋市| 闽侯县| 都匀市| 深州市| 桦甸市|