明天遇到一个小坑,就是在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··· //死循环