明天遇到一个小坑,就是在for包裹的select中应用break,只会跳出select,不会跳出for循环,case如下:
func main() { cxt,cancel := context.WithCancel(context.Background()) var wg sync.WaitGroup wg.Add(1) go func() { defer wg.Done() for { select { case <-cxt.Done(): time.Sleep(time.Second) fmt.Println("it cancel") break //只会跳出select 不会跳出for循环 //在这里能够间接return //或者配合label标签推出循环 default: fmt.Println("Go go go") time.Sleep(time.Second) } } }() time.Sleep(1500*time.Millisecond) cancel() wg.Wait()}
输入
Go go goGo go goit cancelit cancelit cancelit cancelit cancel··· //死循环