首先我会描述我的案例。 我必须从我的应用程序向多个 API 发出 HTTPS 请求,并且它们应该同时运行。 我想知道是否应该为每个 goroutine 使用单独的 HTTP 客户端,或者我可以在所有 goroutine 之间共享一个客户端。当然,我想享受 HTTP 客户端提供的连接重用/池化,但我担心它是线程(又名 goroutine)安全的,并且客户端是否会同时运行请求,或者它们实际上会被排序?
根据文档,Http 客户端是线程安全的(https://golang.org/src/net/http/client.go):
客户端对于多个 goroutine 并发使用是安全的。
另一个问题是您应该使用一个客户端还是每个请求一个客户端。您应该按照以下方式使用一个客户端 https://pkg.go.dev/net/http#pkg-overview
“客户端和传输对于多个 goroutine 并发使用是安全的,并且为了提高效率,应该只创建一次并重复使用”