Golang,为何for-loop的条件判断与for控制块里做if判断存在区别

如下是我的测试代码(一个素数筛),注释掉的方式会跑超时。

// go test -timeout 30s -run ^TestChannelPrime$ package-path -v
func TestChannelPrime(t *testing.T) {
for i := range primeGenerator() {
if i > 13 {
break
}
t.Log(i)
}
}
func primeGenerator() <-chan int {
res := make(chan int)
// 2 ->
// 3    3 ->
// 4
// 5    5    5 ->
// 6
// 7    7    7
// 9    9
go func() {
for curChannel := func() <-chan int {
naturalNumber := make(chan int)
go func() {
for i := 2; ; i++ {
naturalNumber <- i
}
}()
return naturalNumber
}(); ; {
curPrimeNumber := <-curChannel
res <- curPrimeNumber
curChannel = func(curChan <-chan int, curPrime int) <-chan int {
nextChan := make(chan int)
go func() {
for {
if i := <-curChan; i%curPrime != 0 {
nextChan <- i
}
}
// for i := <-curChan; i%curPrime != 0; {
//     nextChan <- i
// }
}()
return nextChan
}(curChannel, curPrimeNumber)
}
}()
return res
}

回答

问题补充:

顺便,想问一下,闭包和传参存在差异(测试代码中curChancurPrime的位置),谁能阐释一下

以上是Golang,为何for-loop的条件判断与for控制块里做if判断存在区别的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>