gpt4 book ai didi

进入 channel 无限循环不阻塞

转载 作者:行者123 更新时间:2023-12-01 22:10:48 29 4
gpt4 key购买 nike

我正在阅读The Go Programming Language的8.5章,并陷入一些代码。下面的代码列表。

func main() {

naturals := make(chan int)
squares := make(chan int)

// Counter
go func() {
for x := 0; x <= 5; x++ {
naturals <- x
}
close(naturals)
}()

// Squarer
go func() {
for v := range naturals {
squares <- v * v
}

close(squares)
}()

// for x := range squares {
// fmt.Println(x)
// }
// OUTPUT(correct):
// 0
// 1
// 4
// 9
// 16
// 25

// for y := 0; y <= 5; y++ {
// fmt.Println(<-squares)
// }
// OUTPUT(correct):
// 0
// 1
// 4
// 9
// 16
// 25

// for {
// fmt.Println(<-squares)
// }
// OUTPUT(incorrect):
// 0
// 0
// 0
// 0
// 0
// 0
// ...

}
我可以理解前 2 个如何工作,但第 3 个似乎出乎意料。
所以我的问题是为什么第三个打印功能不阻塞,并且总是打印 0。

最佳答案

第三个循环的输出是......

0
1
4
9
16
25
0
0
0
等等。它看起来只是零,因为第一个数字已经滚出屏幕。
从关闭的 channel 中读取会导致 channel 类型为零。这是一个无限循环中的 int channel ,因此您会得到无限的 0。

关于进入 channel 无限循环不阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63931148/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com