那是因为在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)
}
最近的评论