Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 标签-中断vs继续vs转到_Loops_Go_Goto - Fatal编程技术网

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
            }
        }
    }