break作用域:
在select代码块中作用于select;没有select在for代码块时作用于for
demo:
package main
import (
"fmt"
"time"
)
var ch = make(chan int, 100)
func main() {
ch <- 98
ch <- 98
hh()
fmt.Println("函数执行结束")
time.Sleep(10 * time.Second)
}
func hh() {
ticker := time.NewTicker(2 * time.Second)
for {
fmt.Println("is for")
select {
case <-ch:
fmt.Println("is select")
break //这里是针对select
case <-ticker.C:
fmt.Println("ticker")
return
}
fmt.Println("select 之后")
break //这里是针对for
}
}
后续:
1.单独在select中使用break意义不大,因为golang会在case执行完毕之后自动执行break。使用break在select中可以用于条件判断后提前退出select
2.select通常结合for使用,利用break加label可以跳出for
demo:
func kk() {
SELECT:
for {
select {
case <-time.After(time.Second):
fmt.Println("一秒后退出")
//break 跳出select
break SELECT //带标签的break,实际上跳出到select外层的for语句块
case <-time.After(time.Second * 10):
fmt.Println("十秒后退出")
break
}
}
fmt.Println("select 语句结束")
}