-
博文分类专栏
- Jquery基础教程
-
- 文章:(15)篇
- 阅读:46654
- shell命令
-
- 文章:(42)篇
- 阅读:154549
- Git教程
-
- 文章:(36)篇
- 阅读:235265
- leetCode刷题
-
- 文章:(76)篇
- 阅读:132502
-
go语言中select {}作用2018-06-21 17:07 阅读(6049) 评论(0)
一、简介
select{}是Go中的一个控制结构,如下:
select { case channel1 : case channel2 : default : }
类似switch,但select中,每个case必须是一个通道操作,要么是发信号,要么是接受信号。比如可以用来监听IO操作,当IO发送变化的时候,触发相应的动作。
特点:
1)如果有多个case满足条件,则会随机公平的选取其中一个满足条件的分支;
2)如果没有case匹配,当有default字句,则执行default字句,若没有default子句,select将会阻塞。
二、案例
1、案例1
有两个协程,根据执行完的先后顺序,来判断需要执行的代码。
package main import ( "time" "fmt" ) func main() { var c1 = make(chan string) var c2 = make(chan string) go func() { time.Sleep(time.Second * 2) fmt.Println("c1执行ok") c1 <- "执行one code" }() go func() { time.Sleep(time.Second * 2) fmt.Println("c2执行ok") c2 <- "执行two code" }() select { //阻塞主进程 case msg1 := <-c1: fmt.Println(msg1) case msg2 := <-c2: fmt.Println(msg2) } }