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

Golang goroutine-safe http client with different timeout?

假设我有以下功能:

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

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

我不确定执行此操作的最佳方法是什么。我应该为不同的超时使用不同的客户端吗?我应该使用一些互斥锁吗?或者一般来说,我如何共享具有不同超时的 HTTP 客户端?

谢谢!

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

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