面试题答案
一键面试在Go的HTTP客户端开发中,可以通过http.Client
结构体的Timeout
字段来设置总的超时时间,也可以分别设置连接超时、读取超时和写入超时。以下是示例代码:
package main
import (
"fmt"
"net/http"
"time"
)
func main() {
// 方法一:设置总的超时时间
client := &http.Client{
Timeout: time.Second * 10, // 设置总的超时时间为10秒
}
resp, err := client.Get("http://example.com")
if err != nil {
fmt.Println("请求出错:", err)
return
}
defer resp.Body.Close()
// 方法二:分别设置连接超时、读取超时和写入超时
transport := &http.Transport{
DialContext: (&net.Dialer{
Timeout: 3 * time.Second, // 连接超时3秒
}).DialContext,
ResponseHeaderTimeout: 5 * time.Second, // 读取响应头超时5秒
WriteTimeout: 3 * time.Second, // 写入超时3秒
}
clientWithTransport := &http.Client{
Transport: transport,
}
respWithTransport, err := clientWithTransport.Get("http://example.com")
if err != nil {
fmt.Println("请求出错:", err)
return
}
defer respWithTransport.Body.Close()
}
- 设置总的超时时间:
- 通过
http.Client
的Timeout
字段设置总的超时时间。这个超时时间包括连接建立、请求发送以及响应读取的整个过程。
- 通过
- 分别设置连接超时、读取超时和写入超时:
DialContext
中的Timeout
设置连接超时,即客户端尝试连接到服务器的最长时间。ResponseHeaderTimeout
设置读取响应头的超时时间,即从服务器接收到响应头的最长时间。WriteTimeout
设置写入请求体到服务器的超时时间。
这样就可以根据实际需求灵活设置不同的超时时间。