我正在使用 rows.Next() 在 for 循环中迭代 sqliteDB 行。然而,基于通道中的布尔值,我需要停止迭代行并退出。
for rows.Next() {
select {
case <-exitChannel:
fmt.Println("\n Exiting")
break
default:
fmt.Println("\nEntering")
doSomething()
}
}
即使 exitChannel 为 true,代码也永远不会进入相应的情况,并且永远不会打印“Exiting”
为了测试它是 go 问题还是 sqliteDB 问题,我运行了一个不带 rows.Next() 的连续 for 循环来检查代码是否进入退出情况。确实如此!
for {
select {
case <-exitChannel:
fmt.Println("\n Exiting")
break
default:
fmt.Println("\nEntering")
}
}
此代码确实打印“退出”
分享问题的解决方法:
for rows.Next() {
forLoop:
select {
case <-exitChannel:
fmt.Println("\n Exiting")
break forLoop
default:
fmt.Println("\nEntering")
doSomething()
}
}