请大神告诉这段代码输出是什么?为什么?谢谢谢谢

luminitaOoO 2017-06-21 01:03:18
package main

import (
"fmt"
)

func main() {
ch := make(chan int)
go shower(ch)
for i := 0; i < 10; i++ {
ch <- i
}

}
func shower(c chan int) {
for {
j := <-c
fmt.Printf("%d ", j)
}
}
...全文
893 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
码无边 2018-01-24
  • 打赏
  • 举报
回复
没有阻塞主线程,执行的结果先行退出了
努力的小虫子 2018-01-03
  • 打赏
  • 举报
回复
建议楼主去看下GO语言中go关键字,以及并发那块的资料,然后看看3楼的小例子
lhw---9999 2017-10-05
  • 打赏
  • 举报
回复
输出结果应该是0 1 2 3 4 5 6 7 8 9 ,但主程序先行结束,有时输出的结果不是完整,把程序修改如下,即可得到完整的结果。
package main

import (
	"fmt"
	"time"
)

func main() {
	ch := make(chan int)
	go shower(ch)
	for i := 0; i < 10; i++ {
		ch <- i
	}
	time.Sleep(1 * time.Second)

}
func shower(c chan int) {
	for {
		j := <-c
		fmt.Printf("%d ", j)
	}
}
luojc714 2017-08-04
  • 打赏
  • 举报
回复
main routine 返回后,程序就结束了,所以shower可能输出不完整。
老青蛙嘎嘎嘎 2017-07-15
  • 打赏
  • 举报
回复
会出现两种结果,关键看goroutine的调度 1. 0 1 2 3 4 5 6 7 8 9 2. 0 1 2 3 4 5 6 7 8

2,187

社区成员

发帖
与我相关
我的任务
社区描述
go语言学习与交流版
社区管理员
  • go语言社区
  • Freeman Z
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧