在本教程中,您将学习 Go 编程语言中可用的另一种控制流结构,即循环。在上一篇教程中,您学习了两种引入分支逻辑的方法,例如使用 if、if-else、if-else if 等的决策语句,以及 switch 语句。我们将学习 for 循环和 for range 循环在 Go 程序中的语法用法。
For 循环语句允许多次执行一组语句。For 循环语句分为三个不同的部分。此外,这三个部分可以形成各种语法,以成功进行循环迭代。
通常在 Golang 中,循环可以分为两种类型
您将了解什么是简单循环,如何退出循环以及如何遍历集合。
在开始学习 Go 语言中的循环之前,让我们先了解 for 循环的基础知识。for 关键字后跟三个语句
基本 for 循环的语法:-
for initializer; condition; incrementor {
}

简单的 for 循环程序
package main
import ("fmt")
func main() {
for i:=0; i<=6; i++ {
fmt.Println(i)
}
}
输出
0 1 2 3 4 5 6
解释
初始化部分用值 0 初始化变量 i。条件部分是 i<=6,只要 i 的值小于等于 6,我们就需要打印与 i 对应的值。下表简要说明了在每次迭代期间如何检查迭代和条件。当 i 的值变为 7 时,条件变为 false,最终退出循环。在每次迭代期间打印输出,显示 i 的当前值,如输出所示。

Golang 允许在 for 循环中进行多变量递增,就像其他语言一样,但您需要了解在 for 循环内编写多变量初始化和递增的语法。
多变量递增和初始化的语法
for i , j :=0 , 0 ; I <= 6; i, j = i+1, j+1 {
}
让我们通过一个例子来理解
package main
import ("fmt")
func main() {
for i , j :=0,0 ;i<=6; i,j = i+1,j+1 {
fmt.Println(i,j)
}
}
输出
0 0 1 1 2 2 3 3 4 4 5 5 6 6
在上面的程序中,我们讨论了通用的 for 循环语法。在 Golang 中,for 循环可以以另一种格式或语法声明。没有必要在 for 循环中给出所有三个语句。在我们的示例中,i 的值或任何要初始化的变量都可以在 for 循环之外初始化。因此,第一个语句在 for 循环中变为空,但必须正确放置分号“;”,否则会导致编译器错误。
语法:-
Initialize
for ; condition ; increment
让我们通过一个程序来理解
package main
import "fmt"
func main() {
i := 0 //initializing i
for ; i < 5; i++ { //for loop with condition part & incrementor
fmt.Println(i)
}
输出
0 1 2 3 4
Golang 中另一种类型的 for 循环语法,与上述语法一样简单。
语法
Initialize
for condition {
}
incrementor
让我们通过一个例子来理解
package main
import "fmt"
func main() {
i := 0
for i < 6 {
fmt.Println(i)
i++
}
}
输出
0 1 2 3 4 5
break 语句在 Go 语言中退出 for 循环。紧跟在 break 语句之后的代码将不再执行。
语法:关键字 break。
package main
import (
"fmt"
)
func main() {
i := 0
for {
fmt.Println(i)
i++
if i >= 4 {
break
}
}
}
输出
0 1 2 3
在上面的程序中使用了只有条件的 for 循环语法。if 语句中给出的条件是当 i 的值超过 3 时停止执行,这是通过 break 语句指定的。当满足上述条件时,这里的 break 语句会退出 for 循环。
continue 语句会跳过 for 循环的指定迭代,并移动到紧随其后的下一次迭代。
语法:关键字 continue
package main
import ("fmt")
func main() {
for i:=0; i < 8; i++ { //for loop
if i == 6 {
continue //continue statement
}
fmt.Println(i)
}
}
输出
0 1 2 3 4 5 7
上述程序跳过了第 6 次迭代,并继续执行 for 循环中的下一次迭代以打印 i 的值。
嵌套循环由一个内循环和一个外循环组成,即一个 for 循环内部包含另一个 for 循环。
语法
For loop outer {
For loop inner {
}
}
package main
import ("fmt")
func main() {
language := [2]string{"Go", "Python"}
tutorials := [3]string{"learn eTutotials", "site1", "site2"}
for i:=0; i < len( language); i++ {
for j:=0; j < len( tutorials); j++ {
fmt.Printf("i= %d j=%d\n", i, j)
fmt.Println( language[i], tutorials[j])
}
}
}
输出
i= 0 j=0 Go learn eTutotials i= 0 j=1 Go site1 i= 0 j=2 Go site2 i= 1 j=0 Python learn eTutotials i= 1 j=1 Python site1 i= 1 j=2 Python site2
解释
在上面的例子中,创建了两个数组,language 和 tutorials,都是字符串数据类型。外层 for 循环包含三个语句。len(language) 函数包含 language 的长度,即 2,而 tutorials 的长度为 3。我们已经在数组中的 len() 函数中讨论过。
for initializer; condition; incrementor {
}
for i:=0; i <2; i++ { // outer loop
for j:=0; j < 3; j++ { //inner loop
fmt.Println( language[i], tutorials[j])
}
}
对于第一次外循环迭代,当 i=0 时,内循环迭代并打印 Go learn etutorials。这里 language[0] 是 Go,而 tutorial[0] 是 learn eTutotials。所以打印 Go learn eTutotials。这里内循环继续迭代直到退出循环。例如,j 再次递增变为 1,检查条件 1 < 3,递增 j 并打印 language[0] tutorials[1],所以输出将是 Go site1,并继续直到退出内循环以进行第一次外循环迭代。
下一次外循环递增并执行上述相同步骤,以打印输出中显示的其余部分。
Golang 中的 For range 循环用于迭代不同的数据结构集合,如数组、映射等。range 关键字迭代数组、映射或切片。
语法
for index, value := range map/slice/array {
//Code to execute
}
package main
import ("fmt")
func main() {
s := [ ]int{1,2,3}
for index,value := range s { // for range loop
fmt.Printf("%v\t%v\n", index, value)
}
}
输出
0 1 1 2 2 3
解释
上述代码使用切片。语法以 for 关键字开始,从索引 0 开始迭代切片 s。range 关键字迭代每个切片元素,并将相应的值存储在 value 中。
例如,当索引为 0 时,range 关键字迭代第一个切片元素,这里是 1。所以值 1 被存储在一个声明为 value 的变量中,用于分配/存储切片元素。重复相同的过程直到到达索引的末尾,即这里的最后一个索引是 2。上面显示的输出使概念变得清晰。