Golang:永远的渠道

时间:2017-11-13 10:24:05

标签: go channel

刚问一个问题,这里发生了什么?

<td th-data:id="${bill.id}" th-data:name="${bill.nome}" class="js-datas">

2 个答案:

答案 0 :(得分:12)

该代码创建一个无缓冲的通道,并尝试从中接收。

由于没有人发送任何东西,它本质上是一个永久阻止的操作。

目的是为了防止goroutine结束/返回,很可能是因为还有其他goroutine可以同时进行某些工作或等待某些事件或传入消息(比如你的日志消息)说)。

需要就是没有这个,应用程序可能会退出而不等待其他goroutines。也就是说,如果main goroutine结束,程序也会结束。引自Spec: Program execution:

  

程序执行从初始化主包然后调用main函数开始。当该函数调用返回时,程序退出。它不会等待其他(非main)goroutines完成。

查看此答案,了解类似和更多技巧:Go project's main goroutine sleep forever?

有关频道的介绍,请参阅What are golang channels used for?

答案 1 :(得分:0)

问题中的代码可能来自RabbitMQ golang教程here

其中有更多扩展内容,并附有我自己的一些建议:

var item = { label: 1, data: 'foo'}
$scope.chart.push(item)