Go语言 循环
-
循环
在某些情况下,您需要多次执行一个代码块。通常,语句是按顺序执行的:函数中的第一个语句首先执行,然后第二个执行,依此类推。编程语言提供了各种控制结构,允许更复杂的执行路径。循环语句允许我们多次执行一个语句或一组语句,以下是大多数编程语言中循环语句的一般形式-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循环。
流程图:范例:
尝试一下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;
流程图:范例:
尝试一下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;
流程图:范例:
尝试一下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语句的上方或下方任意位置设置。流程图:范例:
尝试一下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键终止无限循环。