我正在尝试使用select循环来接收消息或超时信号。如果收到超时信号,循环应该中止:package mainimport ("fmt"; "time")func main() { done := time.After(1*time.Millisecond) numbers := make(chan int) go func() {for n:=0;; {numbers <- n; n++}}() for { select { case <-done: break case num := <- numbers: fmt.Println(num) } }}然而,它似乎并没有停止:$ go run a.go01234567891011121314151617181920212223242526272829303132[...]38243825[...]为什么?我用time.After错了吗?
3 回答
SMILET
TA贡献1796条经验 获得超4个赞
在您的示例代码中, areturn似乎像 Pat 所说的那样合适,但为了将来参考,您可以使用标签:
package main
import (
"fmt"
"time"
)
func main() {
done := time.After(1 * time.Millisecond)
numbers := make(chan int)
// Send to channel
go func() {
for n := 0; ; {
numbers <- n
n++
}
}()
readChannel:
for {
select {
case <-done:
break readChannel
case num := <-numbers:
fmt.Println(num)
}
}
// Additional logic...
fmt.Println("Howdy")
}
- 3 回答
- 0 关注
- 242 浏览
添加回答
举报
0/150
提交
取消