分享
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。
当学完了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大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信1588 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传