这个主要是用于go多线程上的,如果我们想控制子进程,我们可以通过chan(管道)来实现,但是这个方法只能控制单个进程,如果我们想控制多个进程咋办,我们可以使用contex来控制
func main() {
ctx, cancel := context.WithCancel(context.Background())
go func(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("监控退出,停止了...")
return
default:
fmt.Println("goroutine监控中...")
time.Sleep(2 * time.Second)
}
}
}(ctx)
time.Sleep(10 * time.Second)
fmt.Println("可以了,通知监控停止")
cancel()
//为了检测监控过是否停止,如果没有监控输出,就表示停止了
time.Sleep(5 * time.Second)
}
比如这个例子,我们子进程监听context变化,如果发生了变化就提示,然后停止程序
cancel函数就是取消上下文的。