Go http.Transport 主要参数说明

 更新时间:2023年06月05日 08:58:08   作者:amc  
这篇文章主要为大家介绍了Go http.Transport主要参数说明,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

正文

在 Go 中创建一个 http client 时,一般会使用 Go http 包的 Transport 类型。本文主要说明 http.Transport 需要关注的主要参数。

http.Transport 类型说明

首先我们要明确的是,我们开发 http client 的时候,经常会这么写:

client := &http.Client{
    Transport: http.DefaultTransport,
}

但细看可以发现,http.Client 的 Transport 成员类型是 http.RoundTripper,而不是 http.Transport 类型。换句话说,开发者完全可以抛弃原生的实现,自己定制一份 http.RoundTripper 接口来实现一个完整的 http 调用。不过这不在本文说明范围内。

http.Transport 主要参数

该类型通过一系列的参数来决定其行为。请注意的是,同样数据类型的不同参数,其表达的默认值是不同的。

参数作用默认值
连接控制类
Proxy指定使用 http 代理。这里推荐传入 http.ProxyFromEnvironment, 以支持系统配置的 http 代理nil,表示 不使用 任何代理,请注意
DialContextTCP 连接函数。开发者可以简单封装一下,一般可以用来做一些监控或者特殊的地址解析逻辑nil, 使用默认的 http 连接
超时控制类
TLSHandShakeTimeouttime.Duration 类型,表示TLS 握手超时时间。这里推荐传入一个非零值0, 表示无限制
IdleConnTimeouttime.Duration 类型,表示一个连接在空闲多久之后关闭。0, 表示不关闭
连接数控制类
MaxIdleConns最大空闲连接数0, 表示无限制
MaxIdleConnsPerHost每一个 host 的最大连接数http.DefaultMaxIdleConnsPerHost,即 2
缓冲区类
WriteBufferSize写缓冲区的大小4kB
ReadBufferSize读缓冲区的大小4kB
其他
ForceAttemptHTTP2字面意思,是否强制尝试 HTTP2。建议设置为 truefalse, 不尝试

DefaultTransport 配置

http.DefaultTransport 是基于 http.Transport 实现的,其配置说明如下:

参数
Proxyhttp.ProxyFromEnvironment 即 follow 系统配置
DialContextnet.Dialer 类型的 DialContext 方法
TLSHandShakeTimeout10 秒
IdleConnTimeout90 秒
MaxIdleConns100
MaxIdleConnsPerHosthttp.DefaultMaxIdleConnsPerHost,即 2
WriteBufferSize4kB
ReadBufferSize4kB
ForceAttemptHTTP2true

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 主要参数说明的详细内容,更多关于Go http.Transport参数的资料请关注脚本之家其它相关文章!

相关文章

  • 浅析Go语言中的栈和先进先出原则

    浅析Go语言中的栈和先进先出原则

    这篇文章主要来和大家探讨一样如何在Go语言中实现和使用堆栈,以及堆栈如何遵循先进先出 (FIFO) 原则,文中的示例代码简洁易懂,需要的可以参考一下
    2023-07-07
  • Go系列教程之反射的用法

    Go系列教程之反射的用法

    这篇文章主要介绍了Go系列教程之反射的用法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Go语言基于viper的conf库进行配置文件解析

    Go语言基于viper的conf库进行配置文件解析

    在现代软件开发中,配置文件是不可或缺的一部分,如何高效地将这些格式解析到 Go 结构体中,一直是开发者的痛点,下面我们来看看如何使用conf进行配置文件解析吧
    2025-03-03
  • VS Code配置Go语言开发环境的详细教程

    VS Code配置Go语言开发环境的详细教程

    这篇文章主要介绍了VS Code配置Go语言开发环境的详细教程,本文通过实例代码图文相结合的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • Golang打包配置文件的实现示例

    Golang打包配置文件的实现示例

    本文主要介绍了Golang打包配置文件的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Golang Redis连接池实现原理及示例探究

    Golang Redis连接池实现原理及示例探究

    这篇文章主要为大家介绍了Golang Redis连接池实现示例探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • golang实现页面静态化操作的示例代码

    golang实现页面静态化操作的示例代码

    这篇文章主要介绍了golang实现页面静态化操作的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • 详解Go开发Struct转换成map两种方式比较

    详解Go开发Struct转换成map两种方式比较

    本篇文章主要介绍了详解Go开发Struct转换成map两种方式比较,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • golang qq邮件发送验证码功能

    golang qq邮件发送验证码功能

    验证码在多个场景下发挥着重要作用,如注册/登录、短信接口保护、提交/投票、密码找回和支付验证等,以保障账号安全和防止恶意操作,此外,文章还介绍了使用golang通过qq邮件发送验证码的实现过程,包括获取授权码、下载依赖包和编写代码,感兴趣的朋友跟随小编一起看看吧
    2024-09-09
  • Go viper读取配置文件的示例详解

    Go viper读取配置文件的示例详解

    这篇文章主要为大家详细介绍了Go语言如何利用viper实现读取配置文件,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下
    2023-08-08

最新评论