go语言select的作用Go里面提供了一个关键字select , 通过select可以监听channel上的数据流动 。
【go语言select机制 go语言 set】select的用法与switch语言非常类似,由select开始一个新的选择块,每个选择条件由case语句来描述 。
与switch语句相比, select有比较多的限制,其中最大的一条限制就是每个case语句里必须是一个IO操作,大致的结构如下:
在一个select语句中,Go语言会按顺序从头至尾评估每一个发送和接收的语句 。
如果其中的任意一语句可以继续执行(即没有被阻塞),那么就从那些可以执行的语句中任意选择一条来使用 。
如果没有任意一条语句可以执行(即所有的通道都被阻塞),那么有两种可能的情况:
如果给出了default语句,那么就会执行default语句,同时程序的执行会从select语句后的语句中恢复 。
如果没有default语句,那么select语句将被阻塞,直到至少有一个通信可以进行下去
有时候会出现goroutine阻塞的情况,那么我们如何避免整个程序进入阻塞的情况呢?我们可以利用select来设置超时,通过如下的方式实现:
select总结:
作用: 用来监听 channel 上的数据流动方向 。读?写?
select实现fibonacci数列:
在go语言中select关键字怎么用?select 语句使得一个 goroutine 在多个通讯操作上等待 。
select 会阻塞 , 直到条件分支中的某个可以继续执行,这时就会执行那个条件分支 。当多个都准备好的时候,会随机选择一个 。
复制代码代码如下:
package main
import "fmt"
func fibonacci(c, quit chan int) {
x, y := 1, 1
for {
select {
case c - x:
x, y = y, xy
case -quit:
fmt.Println("quit")
return
}
}
}
func main() {
c := make(chan int)
quit := make(chan int)
go func() {
for i := 0; i10; i{
fmt.Println(-c)
}
quit - 0
}()
fibonacci(c, quit)
}
默认选择
当 select 中的其他条件分支都没有准备好的时候,default 分支会被执行 。
为了非阻塞的发送或者接收,可使用 default 分支:
select {
case i := -c:
// use i
default:
// receiving from c would block
}
复制代码代码如下:
package main
import (
"fmt"
"time"
)
func main() {
tick := time.Tick(1e8)
boom := time.After(5e8)
for {
select {
case -tick:
fmt.Println("tick.")
case -boom:
fmt.Println("BOOM!")
return
default:
fmt.Println(".")
time.Sleep(5e7)
}
}
}
go语言select语句特点1 select语句go语言select机制的每个case语句必须IO操作
2 执行 case 语句顺序是随机go语言select机制的
3 selectgo语言select机制的每个case(包含default)语句是阻塞的
4 如果case语句均发生阻塞go语言select机制,那么执行default语句
go语言select机制的介绍就聊到这里吧 , 感谢你花时间阅读本站内容,更多关于go语言 set、go语言select机制的信息别忘了在本站进行查找喔 。
推荐阅读
- 耳机直播伴侣,直播伴侣放歌
- linux拼接的命令,linux字段拼接
- css字体颜色码,css文字颜色代码
- 飞行下落躲避游戏,一个英文的飞行躲障碍游戏
- linux中切换账户命令 切换linux用户
- c语言程序可以有多个主函数吗,c语言程序中可以有多个函数但只能有一个主函数对吗
- 翻滚动作小游戏,翻滚动作小游戏大全
- mysql数据库一访问就死锁,mysql数据库死锁解决
- 等差数列求和函数c语言 等差数列求和函数c语言怎么写