gpt4 book ai didi

for-loop - Go中使用 "continue Label"和使用 "break"跳出内循环的区别

转载 作者:IT王子 更新时间:2023-10-29 01:53:17 25 4
gpt4 key购买 nike

为了跳出内循环并继续外循环,我们可以使用continue Label 或使用break

这是来自 http://www.goinggo.net/2013/11/label-breaks-in-go.html 的示例

原始帖子使用的是 continue Label 模式:

    guestList := []string{"bill", "jill", "joan"}
arrived := []string{"sally", "jill", "joan"}

CheckList:
for _, guest := range guestList {
for _, person := range arrived {
fmt.Printf("Guest[%s] Person[%s]\n", guest, person)

if person == guest {
fmt.Printf("Let %s In\n", person)
continue CheckList
}
}
}

同样的结果可以通过使用 break 来实现,如下所示: http://play.golang.org/p/0YUjkdxxRE

guestList := []string{"bill", "jill", "joan"}
arrived := []string{"sally", "jill", "joan"}

for _, guest := range guestList {
for _, person := range arrived {
fmt.Printf("Guest[%s] Person[%s]\n", guest, person)

if person == guest {
fmt.Printf("Let %s In\n", person)
break
}
}
}

哪种方式在 Go 中更地道?

最佳答案

我不知道是否有任何广泛接受的标准可供使用。但是请注意,这两者是等效的。

采取:

for _,guest := range guestList {
for _,person := range arrived {
fmt.Printf("Guest[%s] Person[%s]\n", guest, person)

if person == guest {
fmt.Printf("Let %s In\n", person)
break
}
}
fmt.Println("Superfluous line!")
}

对比

OuterLoop:
for _,guest := range guestList {
for _,person := range arrived {
fmt.Printf("Guest[%s] Person[%s]\n", guest, person)

if person == guest {
fmt.Printf("Let %s In\n", person)
continue OuterLoop
}
}
fmt.Println("Superfluous line!")
}

如果 breakcontinue 被击中,前者将打印“多余的行!”,而后者则不会。您使用哪个很大程度上取决于您是否希望外循环中的代码在您的内循环终止后执行。如果不存在这样的代码,那么这在很大程度上取决于您是否认为您会在那里添加代码。

请记住您在代码中说的语义。一个是说“我希望外循环进入下一次迭代(如果不存在则退出)”。另一个是说“我希望这个循环退出”。总的来说,我认为大多数人发现影响和考虑的代码,尽可能地,最局部的范围通常是最清晰的。出于这个原因,除非有必要,否则我会避免使用 continue 标签,但我认为无论哪种方式,这都不是一种极大的侮辱。

关于for-loop - Go中使用 "continue Label"和使用 "break"跳出内循环的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23462390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com