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

zxmin · · 1147 次点击
懂了 , 按照您的方式 ,确实可行 找不到go和channel好的学习资料还有应用场景,有资源吗 ?
#2
更多评论
那是因为在channel中的select使用break只会跳出select,不会作用到for上边去,而你又用了死循环,所以最后的打印语句永远执行不到。你可以在isEvenNum函数中多加一个判断执行完毕的标记channel。一种粗暴的做法如下: var d = make(chan struct{}) var count int go isEvenNum(c, d, nums1...) go isEvenNum(c, d, nums2...) go isEvenNum(c, d, nums3...) result := []int{} A: for { select { case t := <-c: fmt.Println(t) result = append(result, t) case <-d: count++ if count == 3 { break A } default: break } } fmt.Println(result) }
#1