请教一下goroutines和channels的搭配使用

zxmin · · 592 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。
当学完了go的routines和channels之后,突发奇想,自己找了个应用场景去应用,但是遇到了问题 使用场景:分批处理数据,查找偶数,集合结果 /** * 判断是否是偶数,存储在chan类型参数中 */ func isEvenNum(result chan<- int, nums ...int) { for _, k := range nums { if k%2 == 0 { result <- k } } } func ChannelUsCase() { var c = make(chan int) /** 定义三组需要处理的数据 */ nums1 := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} nums2 := []int{11, 12, 13, 14, 15, 16, 17, 18, 19, 20} nums3 := []int{21, 22, 23, 24, 25, 26, 27, 28, 29, 30} /** 异步开始任务 */ go isEvenNum(c, nums1...) go isEvenNum(c, nums2...) go isEvenNum(c, nums3...) /** 输出打印结果 */ result := []int{} for { select { case t := <-c: fmt.Println(t) result = append(result, t) default: break } } fmt.Println(result) } 我学习的结论是,select应该是当chan没有阻塞传参的时候,会走default结束,然后打印result的,可是结果只能走case中的打印,下面的fmt.Println(result) 由于阻塞一直未打印,求解

入群交流(和以上内容无关):Go中文网 QQ 交流群:798786647 或加微信入微信群:274768166 备注:入群;关注公众号:Go语言中文网

592 次点击  
加入收藏 微博
2 回复  |  直到 2019-05-25 15:37:19
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传