标签:pre block ret oom select 随机选择 ase 使用 i++
select
语句让goroutine等待多个通信操作。
select
会一直阻塞,直到其中一个case
可以运行,然后执行那个case
。如果有多个就绪,它就随机选择一个。
package main
import "fmt"
func fibonacci(c, quit chan int) {
x, y := 0, 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)
}
如果没有其他case
准备好,则运行select
中的default case
。
使用default case
下尝试发送或接收没有阻塞:
select {
case i := <-c:
// use i
default:
// receiving from c would block
}
package main
import (
"fmt"
"time"
)
func main() {
tick := time.Tick(100 * time.Millisecond)
boom := time.After(500 * time.Millisecond)
for {
select {
case <-tick:
fmt.Println("tick.")
case <-boom:
fmt.Println("BOOM!")
return
default:
fmt.Println(" .")
time.Sleep(50 * time.Millisecond)
}
}
}
标签:pre block ret oom select 随机选择 ase 使用 i++
原文地址:https://www.cnblogs.com/t0000/p/13344987.html