为什么在 select 中对无缓冲的 channel 写入数据会阻塞住并且另一个 channel 也读不到数据
package main
import (
"fmt"
"time"
)
func main() {
ch1 := make(chan int)
ch2 := make(chan int)
go func() {
for {
select {
case v := <-ch1:
fmt.Println("ch1: ", v)
ch2 <- v // 到这里阻塞了
fmt.Println("send to ch2")
case v := <-ch2:
fmt.Println("ch2: ", v)
}
}
}()
ch1 <- 1
for {
time.Sleep(1 * time.Second)
}
}
程序输出
ch1: 1
selece进入了case1阻塞了,case2是没法执行,只有等select-case运行完执行下一次select时才能去case2.