我有以下代码:
package main
import (
"fmt"
"time"
)
func main() {
ch := make(chan int)
ch2 := make(chan int)
go func(c chan int, c2 chan int) {
for {
select {
case v := <-c:
fmt.Println(v)
case v := <-c2:
fmt.Println(v)
default:
}
}
}(ch, ch2)
ch <- 1
close(ch)
close(ch2)
time.Sleep(10 * time.Second)
}
当我运行它时,它会打印1到标准输出,然后继续打印0。为什么是这样?
我知道我可以检查我的 goroutine 中的通道是否关闭,但我只想知道原因。
另外,假设我想在所有(多个)通道关闭后退出 goroutine,这可能吗?我假设一旦所有通道都关闭,我可能会在默认情况下在所有通道关闭后退出 goroutine
幕布斯7119047
catspeake
相关分类