Golang中如何实现网络连接的超时处理?

在Golang中可以通过设置deadline实现网络连接的超时处理。deadline可用于TCP连接、HTTP请求等网络操作。
例如,TCP连接的超时处理:

conn, err := net.DialTimeout("tcp", "127.0.0.1:8000", 3*time.Second) 
// 3秒钟内建立TCP连接 
if err != nil {
    if err, ok := err.(net.Error); ok && err.Timeout() {
        fmt.Println("connection timeout")
    } else {
        fmt.Println(err)
    }
}

HTTP请求的超时处理:

client := &http.Client{
    Timeout: 3 * time.Second, // 3秒钟内完成HTTP请求
}

resp, err := client.Get("http://127.0.0.1:8000/")
if err != nil {
    if err, ok := err.(net.Error); ok && err.Timeout() {
        fmt.Println("request timeout")
    } else {
        fmt.Println(err)
    }
}

我们也可以为已建立的TCP连接或HTTP客户端设置deadline:

conn, err := net.Dial("tcp", "127.0.0.1:8000")
// 建立连接

err = conn.SetDeadline(time.Now().Add(3 * time.Second)) 
// 3秒钟内完成某个操作,否则超时
if err != nil {
    fmt.Println(err)
}

_, err = conn.Read(make([]byte, 1024))
// 读操作
if err != nil {
    if err, ok := err.(net.Error); ok && err.Timeout() {
        fmt.Println("read timeout")
    } else {
        fmt.Println(err)
    } 
}

实现网络连接的超时处理,可以避免系统资源长时间被hang住,保证系统的稳定性。因此掌握超时处理的方法是网络编程的基本要求。