context


这个主要是用于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函数就是取消上下文的。


文章作者: 小游
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小游 !
  目录