context包中的WithCancel、WithDeadline和WithTimeout函数提供了创建上下文(context)对象的能力,这些上下文对象对于管理goroutine的生命周期非常重要,尤其是在处理取消、超时和截止时间的场景中。
- WithCancel
WithCancel函数返回一个新的上下文对象和一个取消函数。调用这个取消函数将取消这个上下文对象,以及从它派生的所有上下文对象。
作用与意义
WithCancel用于创建可以被手动取消的上下文。这对于告知goroutine停止当前工作并及时退出非常有用。
代码案例
package main
import (
"context"
"fmt"
"time"
)
func operation(ctx context.Context, duration time.Duration) {
select {
case <-time.After(duration):
fmt.Println("Operation finished")
case <-ctx.Done():
fmt.Println("Operation cancelled")
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go operation(ctx, 5*time.Second)
time.Sleep(2 * time.Second) // 模拟在操作完成前进行取消