Loops 标签-中断vs继续vs转到
我明白:Loops 标签-中断vs继续vs转到,loops,go,goto,Loops,Go,Goto,我明白: break-停止循环构造的进一步执行 继续-跳过循环体的其余部分并开始下一次迭代 但是,当与标签结合使用时,这些语句有何区别 换句话说,这三个循环之间的区别是什么: Loop: for i := 0; i < 10; i++ { if i == 5 { break Loop } fmt.Println(i) } 循环: 对于i:=0;i
break
-停止循环构造的进一步执行
继续
-跳过循环体的其余部分并开始下一次迭代
但是,当与标签结合使用时,这些语句有何区别
换句话说,这三个循环之间的区别是什么:
Loop:
for i := 0; i < 10; i++ {
if i == 5 {
break Loop
}
fmt.Println(i)
}
循环:
对于i:=0;i<10;i++{
如果i==5{
断环
}
fmt.Println(一)
}
输出: 01 2 3 4
循环:
对于i:=0;i<10;i++{
如果i==5{
继续循环
}
fmt.Println(一)
}
输出: 012346789
循环:
对于i:=0;i<10;i++{
如果i==5{
转到环路
}
fmt.Println(一)
}
输出: 01 2 3 4 01 2 3 4。。。(无限)
对于
中断
和继续
,附加标签允许您指定要引用的循环。例如,您可能希望中断
/继续
外部循环,而不是嵌套的外部循环
以下是来自以下方面的示例:
这样,即使当前正在迭代行中的列(数据),也可以转到下一个“行”。这是因为标签RowLoop
通过直接在外循环前面“标记”外循环
break
可以以相同的方式使用相同的机制。下面是for中的一个示例,当break
语句位于switch语句内部时,它有助于中断循环。如果没有标签,go会认为您打破了switch语句,而不是循环(这里是您想要的)
OuterLoop:
对于i=0;i
对于goto
,这更传统。它使程序在标签next处执行命令。在您的示例中,这会导致一个无限循环,因为您会反复转到循环的开头
记录时间
用于:
如果有一个标签,它必须是一个封闭的“for”、“switch”或“select”语句的标签,该语句的执行将终止
用于:
如果有一个标签,它必须是一个封闭的“for”语句的标签,该语句的执行将继续
这些标签的一个非常重要的用途是如果在循环中有一个switch语句,因为
break
将应用于开关,而不是它周围的循环。顺便说一下,您不需要这些。使用goto
break
或continue
编写的所有代码都可以在不使用它们的情况下编写,其优点是更容易理解和更明确。
Loop:
for i := 0; i < 10; i++ {
if i == 5 {
continue Loop
}
fmt.Println(i)
}
Loop:
for i := 0; i < 10; i++ {
if i == 5 {
goto Loop
}
fmt.Println(i)
}
RowLoop:
for y, row := range rows {
for x, data := range row {
if data == endOfRow {
continue RowLoop
}
row[x] = data + bias(x, y)
}
}
OuterLoop:
for i = 0; i < n; i++ {
for j = 0; j < m; j++ {
switch a[i][j] {
case nil:
state = Error
break OuterLoop
case item:
state = Found
break OuterLoop
}
}
}