欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go net/http的簡單使用小結(jié)

 更新時間:2025年07月25日 08:30:46   作者:小許cod  
Go語言提供了一個功能豐富的net/http包,它提供了客戶端和服務(wù)端的實現(xiàn),使得我們可以比較輕易的創(chuàng)建http服務(wù),下面就來介紹一下Go net/http使用,感興趣的可以了解一下

Go語言提供了一個功能豐富的net/http包,它提供了客戶端和服務(wù)端的實現(xiàn),使得我們可以比較輕易的創(chuàng)建http服務(wù)。

創(chuàng)建一個簡單的http服務(wù)

//step1. 建立 URL:Handler映射表
servemux := http.NewServeMux()
servemux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Hello, world")
})

//step2. 創(chuàng)建并運行HTTP server
server := http.Server{Addr: ":8080", Handler: mux}
log.Fatal(server.ListenAndServe())

除了上面我們使用http.NewServeMux創(chuàng)建一個mux然后再調(diào)用HandleFunc外我們可以也可以這樣使用

//直接調(diào)用http的Handle方法
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Hello, world")
})

//Handle函數(shù)原型
func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {
	DefaultServeMux.HandleFunc(pattern, handler)
}

// DefaultServeMux is the default ServeMux used by Serve.
var DefaultServeMux = &defaultServeMux

var defaultServeMux ServeMux

HandleFunc其實也是調(diào)用了ServeMux的HandleFunc方法,只是使用了DefaultServeMux這個默認實例的用法,這種使用方式在其他庫也是常見的一種方式

Client

Client類型代表HTTP客戶端。它的零值(DefaultClient)是一個可用的使用DefaultTransport的客戶端,這里其實跟DefaultServeMux一樣的實現(xiàn)方。
我們也可以自己實例化一個client

client := &http.Client{
    //指定處理重定向的策略
	CheckRedirect: redirectPolicyFunc, 
	//指定本類型的值執(zhí)行請求的時間限制
	Timeout:30,  
}
//發(fā)送Get請求
resp, err := client.Get("http://example.com")

不過不管是使用默認還是自己實例化client,底層都是調(diào)用do方法,然后基于do方法做Get/Post/PostForm的上層封裝。PostForm的話是提交表單,url.Values類型的data會被編碼為請求的主體。Post數(shù)據(jù)的類型一般會設(shè)為"application/x-www-form-urlencoded"。

resp, err := http.PostForm("http://example.com/form",
	url.Values{"key": {"Value"}, "id": {"123"}})
	
//實際調(diào)用方法,Get/Post都是基于do方法做的封裝
func (c *Client) do(req *Request) (retres *Response, reterr error) {

上層對do方法的封裝主要體現(xiàn)在對Request結(jié)構(gòu)傳遞的不同,比如設(shè)置Request的Method(請求方式Get、Post),具體的Request結(jié)構(gòu)體的可以在net/http/client.go看到。

Request結(jié)構(gòu)

Request類型代表一個服務(wù)端接受到的或者客戶端發(fā)送出去的HTTP請求,在Client發(fā)送請求是,也會傳遞一個request。

之前遇到一個怎么在request(請求)中可以使用下面方式獲取client使用PostForm發(fā)送請求參數(shù)的問題,可以用到下面這種方式。

//ParseForm解析URL中的查詢字符串,并將解析結(jié)果更新到r.Form字段,也就是 url.Values
func (r *Request) ParseForm() error

//接收經(jīng)過ParseForm的值
func (r *Request) FormValue(key string) string
func (r *Request) PostFormValue(key string) string

文件上傳的話使用Fromfile

//FormFile返回以key為鍵查詢r.MultipartForm字段得到結(jié)果中的第一個文件和它的信息
func (r *Request) FormFile(key string) (multipart.File, *multipart.FileHeader, error)

Response結(jié)構(gòu)

Response代表一個HTTP請求的回復(fù),該結(jié)構(gòu)主要有比如StatusCode狀態(tài)碼、Body回復(fù)主體等信息

type Response struct {
    Status     string // 例如"200 OK"
    StatusCode int    // 例如200
    Proto      string // 例如"HTTP/1.0"
    ProtoMajor int    // 例如1
    ProtoMinor int    // 例如0
    Header Header     // Header保管頭域的鍵值對。
    Body io.ReadCloser  // Body代表回復(fù)的主體。
    ContentLength int64 // ContentLength記錄相關(guān)內(nèi)容的長度。
    TransferEncoding []string     // 按從最外到最里的順序列出傳輸編碼
    Close bool         //Close記錄頭域是否指定應(yīng)在讀取完主體后關(guān)閉連接
    Trailer Header     //Trailer字段保存和頭域相同格式的trailer鍵值對
    Request *Request    // Request是用來獲取此回復(fù)的請求
    TLS *tls.ConnectionState    // TLS包含接收到該回復(fù)的TLS連接的信息
}

總結(jié)

net/http包我們在日常開發(fā)中長會用到的一些使用大概描述了一下,比如怎么創(chuàng)建一個web服務(wù),發(fā)送請求調(diào)用do方法,request和response的結(jié)構(gòu)等。后面打算分享下自己對處理http請求流程的理解,哈哈,先拋出幾個問題:ServeHttp是什么,如果我們想實現(xiàn)自己的處理邏輯該怎么做,接口動態(tài)轉(zhuǎn)發(fā)

到此這篇關(guān)于Go net/http的簡單使用小結(jié)的文章就介紹到這了,更多相關(guān)Go net/http使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語言中的日期與時間用法詳細介紹

    Go語言中的日期與時間用法詳細介紹

    Go語言提供了豐富的日期與時間處理函數(shù),涵蓋了從獲取當(dāng)前時間到格式化、時區(qū)轉(zhuǎn)換、定時器和計時器的功能,這篇文章主要給大家介紹了關(guān)于Go語言中日期與時間用法的相關(guān)資料,需要的朋友可以參考下
    2024-06-06
  • go使用支付寶沙箱實現(xiàn)支付寶支付的操作步驟

    go使用支付寶沙箱實現(xiàn)支付寶支付的操作步驟

    支付寶沙箱支付是支付寶提供的一個測試環(huán)境,用于開發(fā)者在不影響真實交易的情況下進行支付接口的開發(fā)和調(diào)試,本文給大家介紹了go使用支付寶沙箱實現(xiàn)支付寶支付的操作步驟,文中有詳細的代碼示例和圖文供大家參考,需要的朋友可以參考下
    2024-03-03
  • golang中定時器cpu使用率高的現(xiàn)象詳析

    golang中定時器cpu使用率高的現(xiàn)象詳析

    這篇文章主要給大家介紹了關(guān)于golang中定時器cpu使用率高的現(xiàn)象的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • golang敏感詞過濾的實現(xiàn)

    golang敏感詞過濾的實現(xiàn)

    本文主要介紹了golang敏感詞過濾的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Go語言共享內(nèi)存讀寫實例分析

    Go語言共享內(nèi)存讀寫實例分析

    這篇文章主要介紹了Go語言共享內(nèi)存讀寫方法,實例分析了共享內(nèi)存的原理與讀寫技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • golang實現(xiàn)文件上傳并轉(zhuǎn)存數(shù)據(jù)庫功能

    golang實現(xiàn)文件上傳并轉(zhuǎn)存數(shù)據(jù)庫功能

    這篇文章主要為大家詳細介紹了golang實現(xiàn)文件上傳并轉(zhuǎn)存數(shù)據(jù)庫功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Go語言單鏈表實現(xiàn)方法

    Go語言單鏈表實現(xiàn)方法

    這篇文章主要介紹了Go語言單鏈表實現(xiàn)方法,實例分析了基于Go語言的單鏈表實現(xiàn)原理與使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • Golang簡介與基本語法的學(xué)習(xí)

    Golang簡介與基本語法的學(xué)習(xí)

    這篇文章主要介紹了Golang簡介與基本語法的學(xué)習(xí),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Go語言中內(nèi)建函數(shù)make的使用

    Go語言中內(nèi)建函數(shù)make的使用

    在Go語言編程中,make函數(shù)是一個重要的內(nèi)建函數(shù),它用于創(chuàng)建和初始化切片、映射和通道,握 make 的使用方法,可以幫助我們更高效地管理內(nèi)存和數(shù)據(jù)結(jié)構(gòu)
    2024-09-09
  • Go項目分層下的最佳error處理方式分享

    Go項目分層下的最佳error處理方式分享

    這篇文章主要來和大家一起探討?Go?項目分層下的最佳?error?處理方式,準備好了嗎?準備一杯你最喜歡的飲料或茶,隨著本文一探究竟吧
    2023-06-06

最新評論