Golang goroutine-safe http客户端有不同的超时?

时间:2015-07-11 16:02:44

标签: go goroutine

假设我有以下功能:

func SendRequest(c *Client, timeout time.Duration) {
  if timeout > 0 {
    c.Timeout = timeout
  } else {
    c.Timeout = defaultTimeout
  }
  ...
}

我想允许多个go-routines来调用这个函数(共享同一个HTTP客户端),但是这样编写的方式显然无法保证goroutine的安全性。 (同样改变传入的客户端的超时也很奇怪......)

我不确定最好的方法是什么。我应该使用不同的客户端进行不同的超时吗?我应该使用一些互斥量吗?或者一般情况下如何共享具有不同超时的HTTP客户端?

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要使用不同的客户端。即使您使用互斥锁保护您的功能,您也无法保护客户端的内部访问权限,而另一个goroutine可能会在发出请求时更改它。

多个客户端仍然可以共享同一个传输,如果您没有指定一个,它们都将使用DefaultTransport。