Go?http.Transport?主要參數(shù)說明
正文
在 Go 中創(chuàng)建一個(gè) http client 時(shí),一般會(huì)使用 Go http 包的 Transport 類型。本文主要說明 http.Transport 需要關(guān)注的主要參數(shù)。
http.Transport 類型說明
首先我們要明確的是,我們開發(fā) http client 的時(shí)候,經(jīng)常會(huì)這么寫:
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ù)來決定其行為。請(qǐng)注意的是,同樣數(shù)據(jù)類型的不同參數(shù),其表達(dá)的默認(rèn)值是不同的。
| 參數(shù) | 作用 | 默認(rèn)值 |
|---|---|---|
| 連接控制類 | ||
| Proxy | 指定使用 http 代理。這里推薦傳入 http.ProxyFromEnvironment, 以支持系統(tǒng)配置的 http 代理 | nil,表示 不使用 任何代理,請(qǐng)注意 |
| DialContext | TCP 連接函數(shù)。開發(fā)者可以簡(jiǎn)單封裝一下,一般可以用來做一些監(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 簡(jiǎn)單示例
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ù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Golang標(biāo)準(zhǔn)庫syscall詳解(什么是系統(tǒng)調(diào)用)
最近在研究go語言,發(fā)現(xiàn)go語言系統(tǒng)調(diào)用源碼只有調(diào)用函數(shù)的定義,今天通過本文給大家分享Golang標(biāo)準(zhǔn)庫syscall詳解及什么是系統(tǒng)調(diào)用,感興趣的朋友一起看看吧2021-05-05
GO語言支付寶沙箱對(duì)接的實(shí)現(xiàn)
本文介紹了如何使用GO語言對(duì)接支付寶沙箱環(huán)境,包括秘鑰生成、SDK安裝和代碼實(shí)現(xiàn)等步驟,詳細(xì)內(nèi)容涵蓋了從秘鑰生成到前端代碼的每個(gè)階段,為開發(fā)者提供了一條清晰的指引2024-09-09
go語言windows下進(jìn)程信息獲取實(shí)現(xiàn)方式
文章主要介紹了如何獲取當(dāng)前進(jìn)程的時(shí)間信息以及進(jìn)程ID的方法,通過使用相關(guān)系統(tǒng)命令或編程語言中的庫函數(shù),可以輕松獲取這些信息,對(duì)于進(jìn)程管理、性能監(jiān)控等場(chǎng)景具有重要價(jià)值2026-04-04

