Go?http.Transport?主要參數(shù)說明
正文
在 Go 中創(chuàng)建一個(gè) http client 時(shí),一般會使用 Go http 包的 Transport 類型。本文主要說明 http.Transport 需要關(guān)注的主要參數(shù)。
http.Transport 類型說明
首先我們要明確的是,我們開發(fā) http client 的時(shí)候,經(jīng)常會這么寫:
client := &http.Client{ Transport: http.DefaultTransport, }
但細(xì)看可以發(fā)現(xiàn),http.Client 的 Transport 成員類型是 http.RoundTripper,而不是 http.Transport 類型。換句話說,開發(fā)者完全可以拋棄原生的實(shí)現(xiàn),自己定制一份 http.RoundTripper 接口來實(shí)現(xiàn)一個(gè)完整的 http 調(diào)用。不過這不在本文說明范圍內(nèi)。
http.Transport 主要參數(shù)
該類型通過一系列的參數(shù)來決定其行為。請注意的是,同樣數(shù)據(jù)類型的不同參數(shù),其表達(dá)的默認(rèn)值是不同的。
參數(shù) | 作用 | 默認(rèn)值 |
---|---|---|
連接控制類 | ||
Proxy | 指定使用 http 代理。這里推薦傳入 http.ProxyFromEnvironment, 以支持系統(tǒng)配置的 http 代理 | nil,表示 不使用 任何代理,請注意 |
DialContext | TCP 連接函數(shù)。開發(fā)者可以簡單封裝一下,一般可以用來做一些監(jiān)控或者特殊的地址解析邏輯 | nil, 使用默認(rèn)的 http 連接 |
超時(shí)控制類 | ||
TLSHandShakeTimeout | time.Duration 類型,表示TLS 握手超時(shí)時(shí)間。這里推薦傳入一個(gè)非零值 | 0, 表示無限制 |
IdleConnTimeout | time.Duration 類型,表示一個(gè)連接在空閑多久之后關(guān)閉。 | 0, 表示不關(guān)閉 |
連接數(shù)控制類 | ||
MaxIdleConns | 最大空閑連接數(shù) | 0, 表示無限制 |
MaxIdleConnsPerHost | 每一個(gè) host 的最大連接數(shù) | http.DefaultMaxIdleConnsPerHost,即 2 |
緩沖區(qū)類 | ||
WriteBufferSize | 寫緩沖區(qū)的大小 | 4kB |
ReadBufferSize | 讀緩沖區(qū)的大小 | 4kB |
其他 | ||
ForceAttemptHTTP2 | 字面意思,是否強(qiáng)制嘗試 HTTP2。建議設(shè)置為 true | false, 不嘗試 |
DefaultTransport 配置
http.DefaultTransport 是基于 http.Transport 實(shí)現(xiàn)的,其配置說明如下:
參數(shù) | 值 |
---|---|
Proxy | http.ProxyFromEnvironment 即 follow 系統(tǒng)配置 |
DialContext | net.Dialer 類型的 DialContext 方法 |
TLSHandShakeTimeout | 10 秒 |
IdleConnTimeout | 90 秒 |
MaxIdleConns | 100 |
MaxIdleConnsPerHost | http.DefaultMaxIdleConnsPerHost,即 2 |
WriteBufferSize | 4kB |
ReadBufferSize | 4kB |
ForceAttemptHTTP2 | true |
DialContext 簡單示例
func dialContext(ctx context.Context, network, addr string) (net.Conn, error) { // 注: 這里無視了 ctx 的超時(shí), 實(shí)際上應(yīng)該加上 log.Debugf("request connecting %v, %v", network, addr) tcpAddr, err := net.ResolveTCPAddr(network, addr) if err != nil { return nil, fmt.Errorf("resolve %s failed: %w", addr, err) } conn, err := net.DialTCP(network, nil, tcpAddr) if err != nil { return nil, fmt.Errorf("connect to %v failed: %w", tcpAddr, err) } return conn, nil }
Reference
以上就是Go http.Transport 主要參數(shù)說明的詳細(xì)內(nèi)容,更多關(guān)于Go http.Transport參數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go語言基于viper的conf庫進(jìn)行配置文件解析
在現(xiàn)代軟件開發(fā)中,配置文件是不可或缺的一部分,如何高效地將這些格式解析到 Go 結(jié)構(gòu)體中,一直是開發(fā)者的痛點(diǎn),下面我們來看看如何使用conf進(jìn)行配置文件解析吧2025-03-03VS Code配置Go語言開發(fā)環(huán)境的詳細(xì)教程
這篇文章主要介紹了VS Code配置Go語言開發(fā)環(huán)境的詳細(xì)教程,本文通過實(shí)例代碼圖文相結(jié)合的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05Golang?Redis連接池實(shí)現(xiàn)原理及示例探究
這篇文章主要為大家介紹了Golang?Redis連接池實(shí)現(xiàn)示例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01golang實(shí)現(xiàn)頁面靜態(tài)化操作的示例代碼
這篇文章主要介紹了golang實(shí)現(xiàn)頁面靜態(tài)化操作的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02詳解Go開發(fā)Struct轉(zhuǎn)換成map兩種方式比較
本篇文章主要介紹了詳解Go開發(fā)Struct轉(zhuǎn)換成map兩種方式比較,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07