Golang 中的循环


2022年1月13日, 学习 eTutorial
1855

在本教程中,您将学习 Go 编程语言中可用的另一种控制流结构,即循环。在上一篇教程中,您学习了两种引入分支逻辑的方法,例如使用 if、if-else、if-else if 等的决策语句,以及 switch 语句。我们将学习 for 循环和 for range 循环在 Go 程序中的语法用法。

Golang 中的 For 循环语句

For 循环语句允许多次执行一组语句。For 循环语句分为三个不同的部分。此外,这三个部分可以形成各种语法,以成功进行循环迭代。 

通常在 Golang 中,循环可以分为两种类型 

  •   for 循环
  •   for range 循环

您将了解什么是简单循环,如何退出循环以及如何遍历集合。

Golang 中的简单循环

在开始学习 Go 语言中的循环之前,让我们先了解 for 循环的基础知识。for 关键字后跟三个语句

  •   第一个语句是初始化器。此语句在第一次迭代之前首先执行。
  •   第二个语句是用于检查条件的任何比较操作,它会产生一个布尔结果。
  •   最后一个/第三个语句是增量器。通常用于增加计数器变量。
     

基本 for 循环的语法:-


for    initializer; condition;   incrementor {
}

GO : For Loop

简单的 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 的当前值,如输出所示。

GO : For-loop

如何在 Golang 中增加两个变量

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 循环

在上面的程序中,我们讨论了通用的 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 中的 While 循环 / 只有条件的 For 循环

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

Golang 中 for 循环的 Break 语句

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 循环。

Golang 中 for 循环的 Continue 语句

continue 语句会跳过 for 循环的指定迭代,并移动到紧随其后的下一次迭代。

语法:关键字 continue

带有 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 循环。

语法


For loop outer {
       For loop inner {
            }
}

用于理解嵌套 for 循环的程序


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 循环

Golang 中的 For range 循环用于迭代不同的数据结构集合,如数组、映射等。range 关键字迭代数组映射切片

语法


for index, value := range map/slice/array {
//Code to execute
} 

用于理解 for range 概念的程序


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。上面显示的输出使概念变得清晰。