【发布时间】:2019-01-30 10:41:40
【问题描述】:
我有一个外循环和内循环,每个循环都在一个范围内进行。我想在内循环内满足条件时退出外循环。
我有一个解决方案,它使用两个'break',一个在内部循环内部,一个在外部循环内部,就在内部循环外部(一个非常简化的演示案例):
package main
import (
"fmt"
)
func main() {
word := ""
for _, i := range("ABCDE") {
for _,j := range("ABCDE") {
word = string(i) + string(j)
fmt.Println(word)
if word == "DC" {
break
}
}
if word == "DC" {
break
}
}
// More logic here that needs to be executed
}
这个解决方案没有问题,但在我看来它只是打补丁和丑陋。有没有更好的方法来做到这一点?
我可以尝试在上一个解决方案的外循环之外再设置一个 for 条件循环,并使用标签并使用 continue 与标签。但正如您所见,这种方法并不比使用 break 的解决方案更优雅。
package main
import (
"fmt"
)
func main() {
word := ""
Exit:
for word != "DC" {
for _, i := range "ABCDE" {
for _, j := range "ABCDE" {
word = string(i) + string(j)
fmt.Println(word)
if word == "DC" {
continue Exit
}
}
}
}
// More logic here that needs to be executed
}
我在这里看到了与其他语言(C、C#、Python 等)有关的类似问题。但我真正感兴趣的是 Go 结构是否有任何技巧,例如“for select”。
【问题讨论】:
-
对于这种特殊情况,只需要
return是否合适? -
它适用于我过于简化的示例。但是,对于该功能来说,还有进一步的逻辑。抱歉没有更清楚。我将修改问题以避免混淆。
-
如果你用函数代替呢?返回
true或false甚至是单词本身。您可以在该函数中使用return -
你考虑过goto吗?
-
您的选项是 flag var、label 或 return。差不多就是这样。