Go语言 循环

  • 循环

    在某些情况下,您需要多次执行一个代码块。通常,语句是按顺序执行的:函数中的第一个语句首先执行,然后第二个执行,依此类推。编程语言提供了各种控制结构,允许更复杂的执行路径。循环语句允许我们多次执行一个语句或一组语句,以下是大多数编程语言中循环语句的一般形式-
    c loop_architecture
    Go编程语言提供了以下类型的循环来处理循环需求。
    循环类型 描述
    for循环 多次执行一系列语句,并简化管理循环变量的代码。
    嵌套循环 这些是任何for循环内的一个或多个循环。
  • for循环

    语法
    
    for [condition |  ( init; condition; increment ) | Range] {
       statement(s);
    }
    
    这是“for”循环中的控制流程-
    • 如果condition可用,则只要condition为真,就会执行for循环。
    • 如果存在一个for子句,它是(init; condition;increment ),则-
      • init步骤首先被执行,并且只有一次。此步骤允许您声明和初始化任何循环控制变量。只要出现分号,就不需要在此处声明。
      • 接下来,评估子句的condition。如果为true,则执行循环主体。如果为假,则循环主体不执行,并且控制流仅在for循环之后跳转到下一条语句。
      • 在for循环的主体执行之后,控制流跳回到increment语句。该语句允许您更新任何循环控制变量。只要条件后出现分号,该语句就可以留空。
      • 现在将再次评估子句condition。如果为true,则执行循环,并重复执行该过程(循环主体,然后递增步长,然后再次执行条件)。条件变为假之后,for循环终止。
    • 如果Range可用,则对范围中的每个项目执行for循环。
    流程图
    c loop
    范例
    
    package main
    
    import "fmt"
    
    func main() {
       var b int = 15
       var a int
       numbers := [6]int{1, 2, 3, 5} 
    
       /* for loop execution */
       for a := 0; a < 10; a++ {
          fmt.Printf("value of a: %d\n", a)
       }
       for a < b {
          a++
          fmt.Printf("value of a: %d\n", a)
       }
       for i,x:= range numbers {
          fmt.Printf("value of x = %d at %d\n", x,i)
       }   
    }
    
    尝试一下
  • 嵌套循环

    Go编程语言允许在另一个循环中使用一个循环。以下部分显示了一些示例来说明概念-
    Go中嵌套的for循环语句的语法如下-
    
    for [condition |  ( init; condition; increment ) | Range] {
       for [condition |  ( init; condition; increment ) | Range] {
          statement(s);
       }
       statement(s);
    }
    
    以下程序使用嵌套的for循环来查找2到100之间的质数-
    范例
    
    package main
    
    import "fmt"
    
    func main() {
       /* local variable definition */
       var i, j int
    
       for i = 2; i < 100; i++ {
          for j = 2; j <= (i/j); j++ {
             if(i%j==0) {
                break; // if factor found, not prime
             }
          }
          if(j > (i/j)) {
             fmt.Printf("%d is prime\n", i);
          }
       }  
    }
    
    尝试一下
  • 循环控制语句

    循环控制语句从其正常顺序更改执行。当执行离开作用域时,在该作用域中创建的所有自动对象都将被销毁。C支持以下控制语句。
    控制声明 描述
    break声明 终止循环或switch语句,并在循环或switch后立即将执行的语句。
    continue声明 使循环跳过其其余部分,并在重新进行迭代之前立即重新测试条件。
    goto声明 将控制权转移到带标签的语句。
  • break声明

    Go编程中的break语句具有以下两种用法-
    • 当在循环内遇到break语句时,循环立即终止,程序控制在循环后的下一条语句处恢复。
    • 它可以用于终止switch语句中的case。
    如果使用嵌套循环,则break语句将停止执行最里面的循环,并开始执行最里面循环块之后的下一行代码。
    语法
    
    break;
    
    流程图
    c loop
    范例
    
    package main
    
    import "fmt"
    
    func main() {
       /* local variable definition */
       var a int = 10
    
       /* for loop execution */
       for a < 20 {
          fmt.Printf("value of a: %d\n", a);
          a++;
          if a > 15 {
             /* terminate the loop using break statement */
             break;
          }
       }
    }
    
    尝试一下
  • continue声明

    Go编程中的continue语句的工作原理与break语句类似。而不是强制终止,它会强制执行循环的下一次迭代,从而跳过之间的任何代码。对于for循环,continue语句使条件测试和循环的增量部分执行。对于while和do ... while循环,continue语句使程序控制传递给条件测试。
    语法
    
    continue;
    
    流程图
    c loop
    范例
    
    package main
    
    import "fmt"
    
    func main() {
       /* local variable definition */
       var a int = 10
    
       /* do loop execution */
       for a < 20 {
          if a == 15 {
             /* skip the iteration */
             a = a + 1;
             continue;
          }
          fmt.Printf("value of a: %d\n", a);
          a++;     
       }  
    }
    
    尝试一下
  • goto声明

    Go goto 语句提供从“goto”的标记声明相同功能的无条件跳转。
    注 – 在任何编程语言中都强烈建议不要使用goto语句,因为它会使跟踪程序的控制流变得困难,从而使程序难以理解和修改。可以重写任何使用goto的程序来避免使用它们。
    语法
    
    goto label;
    ..
    .
    label: statement;
    
    这里的label可以是除C关键字以外的任何纯文本,并且可以在C程序中的goto语句的上方或下方任意位置设置。
    流程图
    c loop
    范例
    
    package main
    
    import "fmt"
    
    func main() {
       /* local variable definition */
       var a int = 10
    
       /* do loop execution */
       LOOP: for a < 20 {
          if a == 15 {
             /* skip the iteration */
             a = a + 1
             goto LOOP
          }
          fmt.Printf("value of a: %d\n", a)
          a++     
       }  
    }
    
    尝试一下
  • 无限循环

    如果条件永远不会为假,则循环将变成无限循环。传统上,for循环用于此目的。“for”循环的三个表达式不是必需的,因此可以通过将条件表达式保留为空来进行无限循环。
    
    package main
    
    import "fmt"
    
    func main() {
       for true  {
           fmt.Printf("This loop will run forever.\n");
       }
    }
    
    当条件表达式不存在时,假定它为真。您可能有一个初始化和增量表达式,但是Go程序员更经常使用for(;;)构造来表示一个无限循环。
    注意 -您可以通过按Ctrl + C键终止无限循环。