context.withtimeout() 函数用于创建带超时的子上下文,子上下文超时或父上下文被取消时,子上下文也会被取消。其使用方法如下:创建父上下文。调用 context.withtimeout(parent, timeout) 创建子上下文,其中 parent 为父上下文,timeout 为子上下文的超时时间。调用子上下文的 cancelfunc 取消子上下文,无论是否超时。

Golang 函数:用 context.WithTimeout 创建带超时的子上下文
context.WithTimeout 函数在 Go 中用于创建一个新的子上下文,并为其设定一个超时。当子上下文超时或父上下文被取消时,子上下文也会被取消。
语法:
立即学习“go语言免费学习笔记(深入)”;
func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc)
其中:
-
parent:父上下文 -
timeout:子上下文的超时时间
返回:
-
Context:新的子上下文 -
CancelFunc:取消子上下文的函数
实战案例:
以下示例演示了如何使用 context.WithTimeout 函数:
package main
import (
"context"
"fmt"
"time"
)
func main() {
// 创建父上下文
ctx := context.Background()
// 创建一个为期 1 秒的子上下文
subCtx, cancel := context.WithTimeout(ctx, 1*time.Second)
defer cancel()
// 在子上下文中执行任务
go func() {
for {
select {
case <-subCtx.Done():
return
default:
fmt.Println("任务仍在运行...")
}
}
}()
// 等待子上下文完成
<-subCtx.Done()
fmt.Println("子上下文超时或被取消")
}注意:
- 当
WithTimeout超时时,它会发送一个context.DeadlineExceeded错误。 - 如果父上下文被取消,所有子上下文也会被取消,无论它们是否超时。
- 调用
CancelFunc函数可以立即取消子上下文。










