Go语言Select的理解
2016-10-11 00:00
399 查看
package main import "time" import "fmt" func main() { // 本例中,我们从两个通道中选择 c1 := make(chan string) c2 := make(chan string) // 为了模拟并行协程的阻塞操作,我们让每个通道在一段时间后再写入一个值 go func() { time.Sleep(time.Second * 1) c1 <- "one" }() go func() { time.Sleep(time.Second * 2) c2 <- "two" }() // 我们使用select来等待这两个通道的值,然后输出 select { case msg1 := <-c1: fmt.Println("received", msg1) case msg2 := <-c2: fmt.Println("received", msg2) default: fmt.Println("default") } }
以上代码只会输出default就退出了,如果我们去掉default,则只会输出one,
for i := 0; i < 2; i++ { // 我们使用select来等待这两个通道的值,然后输出 select { case msg1 := <-c1: fmt.Println("received", msg1) case msg2 := <-c2: fmt.Println("received", msg2) } }
如果在select外面加了for循环则会去循环。
总结起来,select只会对每个case去遍历一次,如果不符合Case1,则去判断Case2,如果设定了default,对于都不符合的到default后直接跳出了。如果没有设置default,则会等待Case1,case2中有一个符合退出。
相关文章推荐
- Go 语言中Select与for结合使用时可能会遇到的坑
- 【Go语言】【18】GO语言的select
- GO语言method、interface、reflection、select
- 【golang】Go语言学习-select用法
- 【Go学习】理解Go语言中的函数闭包
- Go-BufferChannel-Select-基础理解
- 基于 Go 语言来理解 Tensorflow
- 深入理解Go语言中的闭包
- Go语言中地址传递及指针的理解
- 理解Go语言中的函数闭包
- Go语言基础:深入理解 struct 内嵌 inteface
- 深入理解Go语言中的数组和切片
- Go语言学习笔记 --- concurrency、channel、select
- Go语言 Select 详细解读
- GO语言练习:channel select 超时机制
- go语言select关注点
- go语言连接mysql数据库的个人理解
- go语言中select与switch的区别
- Go语言中 select 使用
- 深入理解Go语言中的Dispatcher