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的轮询机制 func fibonacci(c chan int, quit chan int) { x, y := 0, 1 for { select { // select轮询机制 case c <- x: x, y = y, x+y case <-quit: fmt.Println("quit") return } } } main中执行fibonacci函数时候,select有收发管道数据,顺序执行case时候发数据会阻塞, 知道有读取发的数据,然后继续执行,轮询阻塞,知道收到quit管道数据的时候return 执行结果: 0 1 1 2 3 5 8 13 21 34 quit
时间: 2024-09-30 17:10:58