Go?http.Transport?主要參數(shù)說明
正文
在 Go 中創(chuàng)建一個 http client 時,一般會使用 Go http 包的 Transport 類型。本文主要說明 http.Transport 需要關注的主要參數(shù)。
http.Transport 類型說明
首先我們要明確的是,我們開發(fā) http client 的時候,經(jīng)常會這么寫:
client := &http.Client{
Transport: http.DefaultTransport,
}但細看可以發(fā)現(xiàn),http.Client 的 Transport 成員類型是 http.RoundTripper,而不是 http.Transport 類型。換句話說,開發(fā)者完全可以拋棄原生的實現(xiàn),自己定制一份 http.RoundTripper 接口來實現(xiàn)一個完整的 http 調(diào)用。不過這不在本文說明范圍內(nèi)。
http.Transport 主要參數(shù)
該類型通過一系列的參數(shù)來決定其行為。請注意的是,同樣數(shù)據(jù)類型的不同參數(shù),其表達的默認值是不同的。
| 參數(shù) | 作用 | 默認值 |
|---|---|---|
| 連接控制類 | ||
| Proxy | 指定使用 http 代理。這里推薦傳入 http.ProxyFromEnvironment, 以支持系統(tǒng)配置的 http 代理 | nil,表示 不使用 任何代理,請注意 |
| DialContext | TCP 連接函數(shù)。開發(fā)者可以簡單封裝一下,一般可以用來做一些監(jiān)控或者特殊的地址解析邏輯 | nil, 使用默認的 http 連接 |
| 超時控制類 | ||
| TLSHandShakeTimeout | time.Duration 類型,表示TLS 握手超時時間。這里推薦傳入一個非零值 | 0, 表示無限制 |
| IdleConnTimeout | time.Duration 類型,表示一個連接在空閑多久之后關閉。 | 0, 表示不關閉 |
| 連接數(shù)控制類 | ||
| MaxIdleConns | 最大空閑連接數(shù) | 0, 表示無限制 |
| MaxIdleConnsPerHost | 每一個 host 的最大連接數(shù) | http.DefaultMaxIdleConnsPerHost,即 2 |
| 緩沖區(qū)類 | ||
| WriteBufferSize | 寫緩沖區(qū)的大小 | 4kB |
| ReadBufferSize | 讀緩沖區(qū)的大小 | 4kB |
| 其他 | ||
| ForceAttemptHTTP2 | 字面意思,是否強制嘗試 HTTP2。建議設置為 true | false, 不嘗試 |
DefaultTransport 配置
http.DefaultTransport 是基于 http.Transport 實現(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 的超時, 實際上應該加上
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ù)說明的詳細內(nèi)容,更多關于Go http.Transport參數(shù)的資料請關注腳本之家其它相關文章!
相關文章
VS Code配置Go語言開發(fā)環(huán)境的詳細教程
這篇文章主要介紹了VS Code配置Go語言開發(fā)環(huán)境的詳細教程,本文通過實例代碼圖文相結合的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05
Golang?Redis連接池實現(xiàn)原理及示例探究
這篇文章主要為大家介紹了Golang?Redis連接池實現(xiàn)示例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01
golang實現(xiàn)頁面靜態(tài)化操作的示例代碼
這篇文章主要介紹了golang實現(xiàn)頁面靜態(tài)化操作的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-02-02

