以下代码等待“结果” channel 为空 然后 DEFAULT 分支中断到 Label DONE。
现在的问题是:为什么这会破坏 FOR 循环??它似乎 FOR 循环将继续跳到 DEFAULT 并且永远不会 结束。
什么打破了 FOR 循环。
输出如下:
中断完成
结束于
...
DONE:
for {
select { // Nonblocking
case result := <-results:
fmt.Printf("%s:%d:%s\n", result.filename, result.lino,
result.line)
default:
fmt.Println("Break DONE")
break DONE
}
fmt.Println("END Select")
}
fmt.Println("End For")
最佳答案
break DONE
与 C 或其他语言中的 goto DONE
不同。该标签标记了 break DONE
语句在执行时将终止的 for 循环。它不会跳转到 DONE
标签,它会终止标有 DONE
标签的 for 循环。当您想从嵌套循环中中断,或者像您的情况一样,从 select 内部终止循环时,标记的中断非常有用。没有标签中断只会终止选择。
关于go - 选择完成后,这个 FOR 循环如何中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35445630/