在 http.Client 中设置的超时和在请求上下文中设置的超时有什么区别?
我见过 2 种在 http 客户端设置超时的方法。
第一的:
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
req, err := http.NewRequestWithContext(ctx, http.MethodGet, "http://localhost:8080", nil)
Run Code Online (Sandbox Code Playgroud)
第二:
client := http.Client{
Timeout: 2 * time.Second,
}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
Run Code Online (Sandbox Code Playgroud)
什么时候使用一个?
mfa*_*has 21
两者都可以实现相同的目的,即由于超时而终止请求。
但使用上下文是首选方法,因为它是为此任务而设计的。在上下文添加到 Go 之前,字段超时就存在。您必须在创建请求时选择一个超时,因为请求将选择要应用的较小超时,从而使其他超时无用。在这种情况下,更好的方法是使用上下文超时,因为您可以更好地控制它,如果您想通过逻辑决策取消请求,则可以使用取消而不指定超时。使用上下文,您还可以通过它传递描述请求范围值的任何值。
使用上下文是特定于请求的,而使用客户端超时可能适用于传递给Do
客户端方法的所有请求。如果您想专门为每个请求指定截止时间/超时,请使用上下文,否则,如果您希望每个出站请求有 1 个超时,则使用客户端超时就足够了。
您还可以在这里阅读有关Go 中跟踪 HTTP 请求时指定超时的信息
归档时间: |
|
查看次数: |
3788 次 |
最近记录: |