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语言for循环中的break】输出
Go go go
Go go go
it cancel
it cancel
it cancel
it cancel
it cancel
···
//死循环
推荐阅读
- 【生信技能树】R语言练习题|【生信技能树】R语言练习题 - 中级
- 一起来学习C语言的字符串转换函数
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- C语言浮点函数中的modf和fmod详解
- C语言中的时间函数clock()和time()你都了解吗
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- C语言解方程的根和判断是否是闰年
- C语言的版本比较
- whlie循环和for循环的应用
- ffmpeg源码分析01(结构体)