您的位置 首页 知识分享

为什么这段 Go 程序输出的不是 0 到 9 的数字序列?

这段 go 程序输出的是奇数 以下 go 程序旨在将数字 0 到 9 写入一个缓冲区为 10 的管道,然后遍历…

为什么这段 Go 程序输出的不是 0 到 9 的数字序列?

这段 go 程序输出的是奇数

以下 go 程序旨在将数字 0 到 9 写入一个缓冲区为 10 的管道,然后遍历管道并打印其内容:

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。

原因

这个结果是由管道遍历的实现造成的。在 go 中,使用 for range 语句遍历管道时,它会不断地从管道中读取值。在给定的程序中,每次遍历迭代都会从管道中读取一个值,导致游标每次都前进两个位置,因为管道通道为 10,所以在遍历时会使得从管道中读出的数字对应着奇数。

解决方案

为了正确地输出管道中的值,需要修改遍历循环,不再直接读取管道中的值,而是将其存储到一个变量中:

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

这样,每次迭代都会将管道中的值存储到变量 v 中,而游标不会再前进。因此,输出将是正确的数字序列:0 1 2 3 4 5 6 7 8 9。

以上就是这段 Go 程序输出的不是 0 到 9 的数字序列?的详细内容,更多请关注php中文网其它相关文章!

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

作者: nijia

发表评论

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

联系我们

联系我们

0898-88881688

在线咨询: QQ交谈

邮箱: email@wangzhan.com

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

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

微信扫一扫关注我们

关注微博
返回顶部