1 回答

TA贡献1811条经验 获得超4个赞
你的程序永远不会退出的原因是 Go 语言的一个奇怪的怪癖:breakfor 语句case <-quit退出select语句,而不是循环。(不知道为什么这种行为会有用。)要修复你的程序,你需要显式地打破循环:
tickLoop:
for a := range tick.C {
select {
case <-quit:
break tickLoop
default:
fmt.Println(a, "function #", id) // do something on tick
}
}
在编写代码时,它总是等到下一个时钟周期才退出。tick.C您也可以通过读取 select 语句来解决此问题:
tickLoop:
for {
select {
case <-quit:
break tickLoop
case a := <-tick.C:
fmt.Println(a, "function #", id) // do something on tick
}
}
最后,如果您想重组程序以仅使用一个股票代码,您可以启动一个额外的 goroutine,它监听股票代码和通道quit,然后N在每个股票代码时启动子 goroutine。
- 1 回答
- 0 关注
- 146 浏览
添加回答
举报