使用 net/http
包的 Client
结构体中的 Timeout
字段可以设置超时时间,示例代码如下:
import (
"net/http"
"time"
)
func main() {
client := &http.Client{
Timeout: 10 * time.Second,
}
resp, err := client.Post("http://example.com", "application/json", nil)
if err != nil {
// 处理错误
}
defer resp.Body.Close()
// 处理响应结果
}
以上示例将超时时间设置为 10 秒,并发起了一个 POST 请求。如果请求在指定时间内没有得到响应,将返回超时错误。注意,在使用完响应体之后需要手动关闭响应。
另外,如果需要更细粒度的控制,可以使用 context.WithTimeout()
函数创建带有超时控制的上下文对象,然后将其传递给请求的 Context()
方法。示例代码如下:
import (
"context"
"net/http"
"time"
)
func main() {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
req, err := http.NewRequest(http.MethodPost, "http://example.com", nil)
if err != nil {
// 处理错误
}
req = req.WithContext(ctx)
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
// 处理错误
}
defer resp.Body.Close()
// 处理响应结果
}
在这个示例中,我们先创建了一个带有超时控制的上下文对象,并设置了超时时间为 10 秒。然后,我们创建了一个 POST 请求,并将上下文对象传递给了请求的 WithContext()
方法。最后,我们使用 http.Client
发起这个请求,并在返回响应之后关闭响应体。如果请求在指定时间内没有得到响应,将返回超时错误。