go 中的 Context 用法

context 可以用来告诉子 grountine 什么时候结束。

func worker(ctx context.Context) {
	defer wg.Done()
LABEL:

	for {
		fmt.Println("worker......")
		time.Sleep(time.Second)
		select {
		case <-ctx.Done(): //对于没有缓冲区的 chan,如果后面没有人接,那么就要直接跳过。
			break LABEL
		default:
		}
	}
}

var wg sync.WaitGroup

func main() {
	ctx, cancel := context.WithCancel(context.Background())
	wg.Add(1)
	go worker(ctx)
	time.Sleep(time.Second * 5)
	cancel()  //关闭
	wg.Wait() // 等待
	fmt.Println("over")
}
上一篇:Docker下的Jenkins执行docker agent导致Got permission denied 报错


下一篇:Nginx优化