我正在按照此代码获取带有频道的惰性数字范围
// iterator
func iterator(n int, c chan int) {
for i := 0; i < n; i++ {
c <- i
}
close(c)
fmt.Println("iterator End")
}
c := make(chan int)
go iterator(5, c)
for i := range c {
fmt.Println(i)
}
这将按预期打印
0
1
2
3
4
fmt.Println("iterator End")
但是当我像这样打破for循环时发生了什么
c := make(chan int)
go getNumbers(5, c)
for i := range c {
if i == 2 {
break
}
fmt.Println(i)
}
似乎 goroutine 被阻塞了,因为从不打印iterator End(我也尝试通过休眠主线程)。我想知道如何处理这种情况?我需要用它select来解决这个问题吗?有什么安全的方法可以检查范围是否中断并停止迭代器中的for 循环?
慕的地6264312
相关分类