go语言里select go语言里的数组
在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, x + y
case -quit:
fmt.Println("quit")
return
}
}
}
func main() {
c := make(chan int)
quit := make(chan int)
go func() {
for i := 0; i 10; 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)
}
}
}
golang select 为什么要for循环
有数量不定的goroutine往channel里塞东西,然后select来接收并处理。如果所有的goroutine都完成工作,ch也接收完了,那么select就会阻塞。现在我想要跳出死循环,大概是在for循环里设置一些东西,不知道可不可以实现,或者有类似的解决方法。
go func(){ for{ select{ case v:= 《-ch: //这里打左尖括号排版就会乱,不知道是不是网站的bug DoSomething() } } } ()
go语言select语句特点
1 select语句的每个case语句必须IO操作
2 执行 case 语句顺序是随机的
3 select的每个case(包含default)语句是阻塞的
4 如果case语句均发生阻塞,那么执行default语句
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: go语言里select go语言里的数组
本文地址: https://pptw.com/jishu/2133.html