具有不同超时的 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 可以在发出请求时更改它。
多个客户端仍然可以共享同一个传输,如果您不指定一个,它们都将使用默认传输。
假设我有以下功能:
func SendRequest(c *Client, timeout time.Duration) {
if timeout > 0 {
c.Timeout = timeout
} else {
c.Timeout = defaultTimeout
}
...
}
我想允许多个go-routines调用这个函数(共享同一个HTTP客户端),但是这样写显然不能保证goroutine的安全。 (同时更改传入的客户端超时也很奇怪...)
我不确定执行此操作的最佳方法是什么。我应该为不同的超时使用不同的客户端吗?我应该使用一些互斥锁吗?或者一般来说,我如何共享具有不同超时的 HTTP 客户端?
谢谢!
您需要使用不同的客户端。即使您使用互斥锁保护您的功能,您也无法保护客户端的内部访问,并且另一个 goroutine 可以在发出请求时更改它。
多个客户端仍然可以共享同一个传输,如果您不指定一个,它们都将使用默认传输。