您快要准备好了,只需要在goroutine的同步上做一些工作即可。您的问题是您试图在相同的例程中提供解析器并收集结果,但这无法完成。
我提出以下建议:
- 在单独的例程中运行扫描仪,读取所有内容后关闭输入通道。
- 运行单独的例程,等待解析器完成工作,然后关闭输出通道。
- 在主例程中收集所有结果。
相关更改如下所示:
// Go over a file line by line and queue up a ton of workgo func() { scanner := bufio.NewScanner(file) for scanner.Scan() { jobs <- scanner.Text() } close(jobs)}()// Collect all the results...// First, make sure we close the result channel when everything was processedgo func() { wg.Wait() close(results)}()// Now, add up the results from the results channel until closedcounts := 0for v := range results { counts += v}
在 *** 场上完全可用的示例:http :
//play.golang.org/p/coja1_w-fY
值得补充的是,您不一定需要
WaitGroup实现相同的目标,您需要知道的是何时停止接收结果。例如,可以通过扫描仪广告(在频道上)读取多少行,然后收集器仅读取指定数量的结果(您也需要发送零)来实现。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)