面试题答案
一键面试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
执行该请求。如果请求超时,会捕获超时错误并输出提示信息。