乐趣区

关于golang:go语言for循环中的break

明天遇到一个小坑,就是在 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 go
Go go go
it cancel
it cancel
it cancel
it cancel
it cancel
··· 
// 死循环
退出移动版