select中的break和return

yaxiaomu · · 1546 次点击
后来又看了一下: select中的break写不写没有关系,因为golang在select中的case执行完毕之后会自动执行break。单独使用select中的break可用于判断条件后的提前break select一般和for一起使用,想要在select中的case中直接跳出break,需要搭配label使用,这样比较方便简洁,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 语句结束") } ```
#4
更多评论
break是针对for的,直接跳出循环。 return是针对函数,直接终止运行当前函数。 select没有此类对应的关键字。 做实验已经是一个比较好直观观察到现象的方法了。
#1
不好意思,上面说break一定是针对for跳出循环是不对的。 应该是break包在select里面就是针对select的,不是的话则是针对for的,应该是一个作用域问题 return的话不管在哪里都是直接终止函数,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 } } ```
#2