假设我的程序中有一个全球客户。在这个程序中,我有几个 goroutine 向同一个全局客户端发出请求。例如net/http
Golang 伪代码:
package main
func editTransportAndFetch(c *http.Client) {
c.Transport = &http.Transport{
// Make some unique change here
}
c.Get("https://www.google.com")
}
func main() {
client := http.Client
// Spawns 10 processes
for i := 0; i < 10; i++ {
go editTransportAndFetch(client)
}
}
在这个伪代码示例中,我演示了生成 10 个http.Transport
正在编辑的进程。在此示例中,正在进行完全相同的更改,因此干扰可能不是什么大问题。但是,无论如何,如果这些进程同时发生,更新全局客户端传输的进程是否会干扰其他进程可能正在使用的传输?
我的最终用例是我想拥有一个全球客户并能够指定自定义DialTLSContext
但仅限于某些请求。我不想使用的请求也DialTLSContext
可能同时运行。我担心如果我编辑http.Transport
一个请求的客户端,它可能会干扰并导致另一个请求也使用DialTLSContext
,即使我不希望它使用。