假设我有以下功能:
func SendRequest(c *Client, timeout time.Duration) {
if timeout > 0 {
c.Timeout = timeout
} else {
c.Timeout = defaultTimeout
}
...
}
我想允许多个go-routines来调用这个函数(共享同一个HTTP客户端),但是这样编写的方式显然无法保证goroutine的安全性。 (同样改变传入的客户端的超时也很奇怪......)
我不确定最好的方法是什么。我应该使用不同的客户端进行不同的超时吗?我应该使用一些互斥量吗?或者一般情况下如何共享具有不同超时的HTTP客户端?
谢谢!
答案 0 :(得分:1)
您需要使用不同的客户端。即使您使用互斥锁保护您的功能,您也无法保护客户端的内部访问权限,而另一个goroutine可能会在发出请求时更改它。
多个客户端仍然可以共享同一个传输,如果您没有指定一个,它们都将使用DefaultTransport。