欧美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)文章

  • GoFrame通用類型變量gvar與interface基本使用對比

    GoFrame通用類型變量gvar與interface基本使用對比

    這篇文章主要為大家介紹了GoFrame通用類型變量gvar與interface基本使用對比,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Go語言學習之new函數(shù)的用法詳解

    Go語言學習之new函數(shù)的用法詳解

    這篇文章主要為大家詳細介紹了Go語言中new()函數(shù)的相關(guān)知識以及具體用法,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以了解一下
    2023-05-05
  • VsCode搭建Go語言開發(fā)環(huán)境的配置教程

    VsCode搭建Go語言開發(fā)環(huán)境的配置教程

    這篇文章主要介紹了在VsCode中搭建Go開發(fā)環(huán)境的配置教程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • CentOS 32 bit安裝golang 1.7的步驟詳解

    CentOS 32 bit安裝golang 1.7的步驟詳解

    Go是Google開發(fā)的一種編譯型,并發(fā)型,并具有垃圾回收功能的編程語言。在發(fā)布了6個rc版本之后,Go 1.7終于正式發(fā)布了。本文主要介紹了在CentOS 32 bit安裝golang 1.7的步驟,文中給出了詳細的步驟,相信對大家的學習和理解具有一定的參考借鑒價值,下面來一起看看吧。
    2016-12-12
  • Golang學習筆記(五):函數(shù)

    Golang學習筆記(五):函數(shù)

    這篇文章主要介紹了Golang學習筆記(五):函數(shù)的相關(guān)資料,本文講解了基本語法、多返回值及命名返回參數(shù)、參數(shù)傳遞:傳值與傳指針、參數(shù)傳遞:可變參數(shù)、匿名函數(shù)、函數(shù)作為值、類型等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • Go語言開發(fā)技巧必知的小細節(jié)提升效率

    Go語言開發(fā)技巧必知的小細節(jié)提升效率

    這篇文章主要介紹了Go語言開發(fā)技巧必知的小細節(jié)提升效率,分享幾個你可能不知道的Go語言小細節(jié),希望能幫助大家更好地學習這門語言
    2024-01-01
  • go語言的初始化順序,包,變量,init詳解

    go語言的初始化順序,包,變量,init詳解

    這篇文章主要介紹了go語言的初始化順序,包,變量,init詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 詳解Go語言如何判斷兩個對象是否相等

    詳解Go語言如何判斷兩個對象是否相等

    在編程中,判斷兩個對象是否相等是一項常見的任務(wù),同時判斷對象是否相等在很多情況下都非常重要,所以在接下來的內(nèi)容中,我們將詳細介紹在?Go?語言中如何判斷對象是否相等的方法和技巧,需要的可以參考一下
    2023-06-06
  • Go語言建議多使用切片少使用數(shù)組原理探究

    Go語言建議多使用切片少使用數(shù)組原理探究

    這篇文章主要為大家介紹了Go語言建議多使用切片少使用數(shù)組原理探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • go開源Hugo站點構(gòu)建三步曲之集結(jié)渲染

    go開源Hugo站點構(gòu)建三步曲之集結(jié)渲染

    這篇文章主要為大家介紹了go開源Hugo站點構(gòu)建三步曲之集結(jié)渲染詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02

最新評論