MST

星途 面试题库

面试题:Go语言中Context的超时控制用法

在Go语言中,如何使用Context来设置一个函数执行的超时时间?请举例说明实现一个简单的网络请求,并在2秒后超时的代码。
34.4万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "context"
    "fmt"
    "net/http"
    "time"
)

func main() {
    ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
    defer cancel()

    req, err := http.NewRequestWithContext(ctx, http.MethodGet, "http://example.com", nil)
    if err != nil {
        fmt.Println("创建请求失败:", err)
        return
    }

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        if err, ok := err.(net.Error); ok && err.Timeout() {
            fmt.Println("请求超时")
        } else {
            fmt.Println("请求发生其他错误:", err)
        }
        return
    }
    defer resp.Body.Close()

    fmt.Println("请求成功")
}

上述代码首先使用context.WithTimeout创建一个带有超时时间(2秒)的Context,然后基于这个Context创建一个HTTP请求,并使用http.Client执行该请求。如果请求超时,会捕获超时错误并输出提示信息。