go - 单例 http 客户端

标签 go

我正在创建一个具有调用一些api的函数的类,到目前为止我有:

var client *http.Client

func getClient() *http.Client {
    if client == nil {
        client = &http.Client{
            Timeout: time.Second * 30,
            Transport: &http.Transport{
                Dial: (&net.Dialer{
                Timeout:   30 * time.Second,
                KeepAlive: 30 * time.Second,
            }).Dial,
            TLSHandshakeTimeout: 10 * time.Second,
            },
        }
    }
    return client
}
然后创建一个执行调用的函数:
func CallRestApi(request Request) (response Response) {
    getClient()
    req, err := http.NewRequest(request.Method, url, bytes.NewBuffer(request.Params))
    
    resp, err := client.Do(req)
    ...
}
我不确定这样我是否会创建一个单例 client实例,以便从执行此函数的任何模块中,如果该实例已存在,则将使用该实例。

最佳答案

这是一种更简单的方法:

var Client *http.Client= &http.Client{
            Timeout: time.Second * 30,
            Transport: &http.Transport{
                Dial: (&net.Dialer{
                Timeout:   30 * time.Second,
                KeepAlive: 30 * time.Second,
            }).Dial,
            TLSHandshakeTimeout: 10 * time.Second,
            },
        }
    }
您不需要单独的初始化函数来初始化变量。

关于go - 单例 http 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62904351/

相关文章:

go - 编码私钥得到错误 : asn1: structure error: tags don't match

javascript - 长轮询, "Global"按钮,向所有人广播?

c - 在 libpango 中调用 pango_cairo_font_map_get_default() 时出现 "GLib-GObject-CRITICAL"的原因是什么?

go - 将 CORS header 添加到 gqlgen 默认示例中?

file - 如何在 Go 中获取文件长度?

gorilla Websocket - 读取错误 : repeated read on failed websocket connection

go - 带有数据列表的yaml文件

go - 当没有定义 $GOPATH 时,如何查找安装了 'go get -u' 的 Go 包?

go - 与 golang 中已验证的发件人身份错误不匹配

xml - 解码时可以在没有专用根元素的情况下组合 XML 子节点吗?