你有太多的go
块,不仅在代码中数量多,而且执行的数量也很多。循环中的第一个go
块不会阻塞——它允许立即继续执行。无法保证在相同的块再次执行之前,之前的块有足够的时间将值放入通道。这是一个竞争条件。
为了确认,只需运行以下代码:(set (repeatedly 10000 mojorate))
。如果得到的是单个元素的集合,请增加数字。
这个代码片段向一个通道发送了10个数字,并将它们返回——除以2。
句子的前半部分是函数用户角度的一个实现细节,与问题无关。如果您需要的只是从1开始得到10个数字的向量,每个数字除以2,那么当然有(mapv #(/ % 2) (range 1 11))
。
如果您需要其他内容,请详细描述,以免陷入XY问题。原始函数可以以多种方式重写,但如果您的问题需要特定的东西,则其中任何一个都可能有误。