select执行后会直接结束,所以一般会跟for循环结合使用。 func testSelect() { ticker := time.NewTicker(time.Second) defer ticker.Stop() for { select { case <-ticker.C: fmt.Println(1) } } } // 会一直循环下去 // 运行输出结果: 1 1 ... break 在select中break,并不会跳出for循环。
for{select{casemsg:=<-msgsChan:msgs=append(msgs,qtmsg)default:break}} 如果没有msg消息,这个break不会从for退出,就会出现死循cpu就上来了,正确的写法应该是 forloop:=true;loop{select{case<-msg:// do your task herecase<-ctx.Done():loop=falsebreak}} 参考: Does a break statement break from a...
ch := make(chanint,30) fori := 0; i < 30; i++ { ch <- i } for{ select{ cased :=<- ch: log.Printf("Executor received: %v", d) default: break } } returntrue } 该代码不能跳出for循环,不能打印true,所以要再for循环外加代码块,在select里面 break代码块就可以跳出for循环了loop:...
原因: [A "break" statement terminates execution of the innermost "for", "switch" or "select" statement. 官方文档](https://golang.org/ref/spec#Break_statements) BreakStmt = "break" [ Label ] . If there is a label, it must be that of an enclosing "for", "switch" or "select" sta...
select { case <-time.After(time.Second * time.Duration(2)): i++ if i == 5 { fmt.Println("跳出for循环") } } fmt.Println("for循环内 i=", i) } fmt.Println("for循环外") } 解决办法有两个: 1.使用break: func SelectTest() { ...
break } } 1. 2. 3. 4. 5. 6. 7. 8. **原因: A“break” statement terminates execution of the innermost “for”, “switch” or “select” statement.** 官方文档 BreakStmt = “break” [ Label ] . If there is a label, it must be that of an enclosing “for”, “switch” or ...
select { case <-time.After(time.Second * time.Duration(2)): i++ if i == 5 { fmt.Println("跳出for循环") } } fmt.Println("for循环内 i=", i) } fmt.Println("for循环外") } 解决办法有两个: 1.使用break: func SelectTest() { ...
break } } 原因: [A "break" statement terminates execution of the innermost "for", "switch" or "select" statement. 官方文档](https://golang.org/ref/spec#Break_statements) BreakStmt = "break" [ Label ] . If there is a label, it must be that of an enclosing "for", "switch" or ...
执行后发现,什么?居然break不出去?后来查了一下资料发现,当for 和 select结合使用时,break语言是无法跳出for之外的,因此若要break出来,这里需要加一个标签,使用goto, 或者break 到具体的位置 解决方法一:使用golang中break的特性,在外层for加一个标签 ★
funcTest_code(t*testing.T){taskQueue:=make(chanint,1)dotask:=func(){println(111)}taskQueue<-1for{select{case<-taskQueue:dotask()default:// 加上defaultbreak// 这里的 break 只结束 select ,不结束 for}}} 虽然解决了 死锁问题,但是依然只会打印一次 111,也就是 dotask 只会执行一次 ...