一、select简介
Golang中select和switch结构特别像,但是select中case的条件只能是I/O
select 的语法(condition是条件)
select{
case condition:
case condition:
default:
}
select执行过程:
每个case必须是一个IO操作
哪个case可以执行就执行哪个
多个case都可以执行,随机执行一个
所有case都不能执行时,执行default
所有case都不能执行,且没有default,将会阻塞
func main() {
runtime.GOMAXPROCS(1)
ch1 := make(chan int, 1)
ch2 := make(chan string, 1)
ch1 <- 1
ch2 <- "hello"
select {
case value := <-ch1:
fmt.Println(value)
case value := <-ch2:
fmt.Println(value)
}
}
select多和for循环结合使用,下面例子演示出了一直在接收消息的例子
package main
import (
"fmt"
)
func main() {
ch := make(chan int)
for i := 1; i <= 5; i++ {
go func(arg int) {
ch <- arg
}(i)
}
//如果是一直接受消息,应该是死循环for{},下面代码中是明确知道消息个数
for i := 1; i <= 5; i++ {
select {
case c := <-ch:
fmt.Println("取出数据", c)
default:
//没有default会出现死锁
}
}
fmt.Println("程序执行结束")
}
break可以对select生效,如果for中嵌套select,break选择最近结构
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。