📜  Go 语言中的循环

📅  最后修改于: 2021-10-24 13:24:14             🧑  作者: Mango

Go 语言只包含一个循环,即 for 循环。 for 循环是一种重复控制结构,它允许我们编写一个执行特定次数的循环。在 Go 语言中,这个 for 循环可以以不同的形式使用,形式有:

1. 简单的 for 循环与我们在其他编程语言中使用的类似,如 C、C++、 Java、C# 等。

句法:

for initialization; condition; post{
       // statements....
}

这里,

  • 初始化语句是可选的,在 for 循环开始之前执行。初始化语句总是在一个简单的语句中,如变量声明、增量或赋值语句或函数调用。
  • 条件语句包含一个布尔表达式,在循环的每次迭代开始时对其进行评估。如果条件语句的值为真,则执行循环。
  • post语句在 for 循环体之后执行。在 post 语句之后,如果条件语句的值为假,则条件语句再次求值,然后循环结束。

例子:

// Go program to illustrate the  
// use of simple for loop 
package main
  
import "fmt"
  
// Main function
func main() {
      
    // for loop 
    // This loop starts when i = 0 
    // executes till i<4 condition is true
    // post statement is i++
    for i := 0; i < 4; i++{
      fmt.Printf("GeeksforGeeks\n")  
    }
    
}

输出:

GeeksforGeeks
GeeksforGeeks
GeeksforGeeks
GeeksforGeeks

2. For 循环作为无限循环:通过从 for 循环中删除所有三个表达式,for 循环也用作无限循环。当用户没有在 for 循环中写入条件语句时,表示条件语句为真,循环进入无限循环。

句法:

for{
     // Statement...
}

例子:

// Go program to illustrate the  
// use of an infinite loop 
package main
  
import "fmt"
  
// Main function
func main() {
      
    // Infinite loop
    for {
      fmt.Printf("GeeksforGeeks\n")  
    }
    
}

输出:

GeeksforGeeks
GeeksforGeeks
GeeksforGeeks
GeeksforGeeks
GeeksforGeeks
GeeksforGeeks
GeeksforGeeks
GeeksforGeeks
GeeksforGeeks
GeeksforGeeks
...........

3. for 循环作为while 循环: for 循环也可以作为while 循环工作。这个循环一直执行到给定的条件为真。当给定条件的值为假时,循环结束。

句法:

for condition{
    // statement..
}

例子:

// Go program to illustrate the  
// the for loop as while Loop
package main
  
import "fmt"
  
// Main function
func main() {
      
    // while loop
    // for loop executes till 
    // i < 3 condition is true
    i:= 0
    for i < 3 {
       i += 2
    }
  fmt.Println(i) 
}

输出:

4

4. for 循环中的简单范围:您也可以在 for 循环中使用范围。

句法:

for i, j:= range rvariable{
   // statement..
}

这里,

  • i 和 j 是分配迭代值的变量。它们也称为迭代变量。
  • 第二个变量,即 j 是可选的。
  • 范围表达式在循环开始之前计算一次。

例子:

// Go program to illustrate the  
// use of simple range loop 
package main
  
import "fmt"
  
// Main function
func main() {
      
    // Here rvariable is a array
    rvariable:= []string{"GFG", "Geeks", "GeeksforGeeks"} 
      
    // i and j stores the value of rvariable
    // i store index number of individual string and
    // j store individual string of the given array
    for i, j:= range rvariable {
       fmt.Println(i, j) 
    }
    
}

输出:

0 GFG
1 Geeks
2 GeeksforGeeks

5. 对字符串使用 for 循环: for 循环可以遍历字符串的 Unicode 代码点。

句法:

for index, chr:= range str{
     // Statement..
}

在这里,该索引是存储UTF-8编码码点的第一个字节和CHR存储给定字符串的各字符和STR是一个字符串变量。

例子:

// Go program to illustrate the  
// use for loop using string
package main
  
import "fmt"
  
// Main function
func main() {
      
    // String as a range in the for loop
    for i, j:= range "XabCd" {
       fmt.Printf("The index number of %U is %d\n", j, i) 
    }
    
}

输出:

The index number of U+0058 is 0
The index number of U+0061 is 1
The index number of U+0062 is 2
The index number of U+0043 is 3
The index number of U+0064 is 4

6. For Maps: for 循环可以迭代映射的键值对。

句法:

for key, value := range map { 
     // Statement.. 
}

例子:

// Go program to illustrate the  
// use for loop using maps
package main
  
import "fmt"
  
// Main function
func main() {
      
    // using maps
    mmap := map[int]string{
        22:"Geeks",
        33:"GFG",
        44:"GeeksforGeeks",
    }
    for key, value:= range mmap {
       fmt.Println(key, value) 
    }
    
}

输出:

22 Geeks
33 GFG
44 GeeksforGeeks

7. For Channel: for 循环可以迭代通道上发送的顺序值,直到它关闭。

句法:

for item := range Chnl { 
     // statements..
}

例子:

// Go program to illustrate the  
// use for loop using channel
package main
  
import "fmt"
  
// Main function
func main() {
      
    // using channel
    chnl := make(chan int)
    go func(){
        chnl <- 100
        chnl <- 1000
       chnl <- 10000
       chnl <- 100000
       close(chnl)
    }()
    for i:= range chnl {
       fmt.Println(i) 
    }
    
}

输出:

100
1000
10000
100000

要点:

  • for 循环的三个语句周围不使用括号。
  • 花括号在 for 循环中是强制性的。
  • 左大括号应该在 post 语句所在的同一行中。
  • 如果数组、字符串、切片或映射为空,则 for 循环不会给出错误并继续其流程。或者换句话说,如果数组、字符串、切片或映射为 nil,则 for 循环的迭代次数为零。