MST

星途 面试题库

面试题:Go语言中HTTP客户端设置超时的方法

在Go的HTTP客户端开发中,如何设置请求的超时时间?请给出示例代码说明不同超时设置(如连接超时、读取超时、写入超时)的方法。
18.0万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

在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()
}
  1. 设置总的超时时间
    • 通过http.ClientTimeout字段设置总的超时时间。这个超时时间包括连接建立、请求发送以及响应读取的整个过程。
  2. 分别设置连接超时、读取超时和写入超时
    • DialContext中的Timeout设置连接超时,即客户端尝试连接到服务器的最长时间。
    • ResponseHeaderTimeout设置读取响应头的超时时间,即从服务器接收到响应头的最长时间。
    • WriteTimeout设置写入请求体到服务器的超时时间。

这样就可以根据实际需求灵活设置不同的超时时间。