Go语言中的context包:控制请求超时与取消的利器
package main
import (
"context"
"fmt"
"time"
)
func main() {
// 创建一个具有默认超时的context
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel() // 确保在函数退出前取消context
select {
case <-time.After(10 * time.Second):
fmt.Println("请求超时")
return
case <-ctx.Done():
fmt.Println("请求被取消:", ctx.Err())
return
}
}
这段代码使用了context
包来控制一个函数的执行时间。通过context.WithTimeout
函数创建了一个具有5秒超时的context,如果在10秒内没有完成会触发超时;如果在5秒内完成了会正常退出。使用select
语句等待超时或者context完成,并在必要时取消context。这是一个处理请求超时和取消的简单例子。
评论已关闭