您的位置 首页 知识分享

Go 语言通道遍历结果怪异之谜:为什么程序只能输出奇数索引的值?

go 语言基础:通道遍历结果怪异之谜 在 go 语言中,通道是一种强大的并发机制。当我们使用通道传输数据时,可…

Go 语言通道遍历结果怪异之谜:为什么程序只能输出奇数索引的值?

go 语言基础:通道遍历结果怪异之谜

在 go 语言中,通道是一种强大的并发机制。当我们使用通道传输数据时,可能遇到一些奇怪的结果。本文将探讨一个经典示例,揭示其背后的原因并提供一种正确的遍历方法。

问题:

下列程序段产生的输出令人困惑:

package main  import "fmt"  func main() {     ch := make(chan int, 10)     for i := 0; i < 10; i++ {         ch <- i     }     close(ch)     for range ch {         fmt.println(<-ch)     } }
登录后复制

结果:

1 3 5 7 9
登录后复制

解答:

此问题源于通道遍历的方式。在最终 for 循环中,你不仅遍历通道,还从通道中读取值。这会导致游标在通道中前进两次:一次是由遍历本身,一次是由

因此,最终输出仅包含通道中奇数索引的值。要正确打印所有值,应将最终 for 循环修改为:

for v := range ch {     fmt.println(v) }
登录后复制

这样,遍历就不会再从通道中读取值,因此输出正确:

0 1 2 3 4 5 6 7 8 9
登录后复制

通过理解通道遍历的机制,我们可以避免意外的结果,确保代码的正确性。

以上就是Go 语言通道遍历结果怪异之谜:程序只能输出奇数索引的值?的详细内容,更多请关注php中文网其它相关文章!

本文来自网络,不代表甲倪知识立场,转载请注明出处:http://www.spjiani.cn/wp/4654.html

作者: nijia

发表评论

您的电子邮箱地址不会被公开。

联系我们

联系我们

0898-88881688

在线咨询: QQ交谈

邮箱: email@wangzhan.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部