1.什么是select?
select
语句的机制有点像switch
语句,不同的是,select
会随机挑选一个可通信的case
来执行,如果所有case
都没有数据到达,则执行default
,如果没有default
语句,select
就会阻塞,直到有case
接收到数据。
2. select使用(没有default)
如果没有default
语句时,select
就会阻塞,直到有case
接收到数据。
package main import ( "fmt" "strconv" ) func main() { intChan := make(chan int) stringChan := make(chan string)
go func() { for i := 1; i < 4; i++ { intChan <- i stringChan <- "张xx-" + strconv.Itoa(i) } }() select { case n := <-intChan: fmt.Printf("接收到intChan中的数据: %v\n", n) case s := <-stringChan: fmt.Printf("接收到stringChan中的数据: %v\n", s) } fmt.Printf("运行结束!") }
|
3.select使用(有default)
如果有default
时,所有case
都没有数据到达,则执行default
。
package main import ( "fmt" "strconv" ) func main() { intChan := make(chan int) stringChan := make(chan string)
go func() { for i := 1; i < 4; i++ { intChan <- i stringChan <- "张xx-" + strconv.Itoa(i) } }()
select { case n := <-intChan: fmt.Printf("接收到intChan中的数据: %v\n", n) case s := <-stringChan: fmt.Printf("接收到stringChan中的数据: %v\n", s) default: fmt.Println("什么数据都没收到!") } fmt.Printf("运行结束!") }
|