【发布时间】:2014-10-20 12:41:56
【问题描述】:
取如下代码sn-p:
func main() {
ch := make(chan int)
quit := make(chan int)
go func() {
for {
ch <- querySomePeriodicThing()
}
}()
// ...
loop:
for {
select {
case <-ch: handlePeriodicThing()
case <-quit: break loop
}
}
}
goroutine 应该在执行期间运行。当 select 语句从 quit 通道接收到某些内容时,它会跳出循环并结束程序,而不会尝试停止 goroutine。
我的问题:这是否会产生任何间歇性的不利影响,运行一次或两次并不明显?我知道在其他语言中应该在程序结束之前清理(即退出)线程,但是 go 不同吗?假设 querySomePeriodicThing() 没有打开文件描述符或套接字或任何不打开的东西。
【问题讨论】: