跟我一起来学golang之《循环语句》| 8月更文挑战

360 阅读2分钟

这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战

循环语句表示条件满足,可以反复的执行某段代码。for是唯一的循环语句。(Go没有while循环)

for语句

语法结构:

for init; condition; post { }

初始化语句只执行一次。在初始化循环之后,将检查该条件。如果条件计算为true,那么{}中的循环体将被执行,然后是post语句。post语句将在循环的每次成功迭代之后执行。在执行post语句之后,该条件将被重新检查。如果它是正确的,循环将继续执行,否则循环终止。

  • 在*初始化(initialization)*语句是可选的,用于循环开始之前执行。初始化语句始终位于简单的语句中,例如变量声明,递增或赋值语句或函数调用。
  • 条件(condition)语句包含一个布尔表达式,该表达式在循环的每次迭代开始时计算。如果条件语句的值为true,则执行循环。
  • post语句在for循环体之后执行。在post语句之后,条件语句再次计算条件语句的值是否为false,然后循环结束。

示例代码:

package main

import (  
    "fmt"
)

func main() {  
    for i := 1; i <= 10; i++ {
        fmt.Printf("%d",i)
    }
}

在for循环中声明的变量仅在循环范围内可用。因此,i不能在外部访问循环。

for循环变体

所有的三个组成部分,即初始化、条件和post都是可选的。

for condition { } //效果与while相似
for { } //效果与for(;;) 一样

for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环

for key, value := range oldMap {
    newMap[key] = value
}

package main

import "fmt"

func main() {

   var b int = 15
   var a int

   numbers := [6]int{1, 2, 3, 5} 

   /* for 循环 */
   for a := 0; a < 10; a++ {
      fmt.Printf("a 的值为: %d\n", a)
   }

   for a < b {
      a++
      fmt.Printf("a 的值为: %d\n", a)
      }

   for i,x:= range numbers {
      fmt.Printf("第 %d 位 x 的值 = %d\n", i,x)
   }   
}
  • key和value是分配迭代值的变量。它们也称为迭代变量。
  • 第二个变量,即value是可选的。
  • 范围表达式在循环开始之前被评估一次。

运行结果:

a 的值为: 0
a 的值为: 1
a 的值为: 2
a 的值为: 3
a 的值为: 4
a 的值为: 5
a 的值为: 6
a 的值为: 7
a 的值为: 8
a 的值为: 9
a 的值为: 1
a 的值为: 2
a 的值为: 3
a 的值为: 4
a 的值为: 5
a 的值为: 6
a 的值为: 7
a 的值为: 8
a 的值为: 9
a 的值为: 10
a 的值为: 11
a 的值为: 12
a 的值为: 13
a 的值为: 14
a 的值为: 150 位 x 的值 = 11 位 x 的值 = 22 位 x 的值 = 33 位 x 的值 = 54 位 x 的值 = 05 位 x 的值 = 0

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

语法:

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

在这里,索引是存储UTF-8编码代码点的第一个字节的变量,而chr是存储给定字符串的字符的变量,而str是字符串。

示例

package main

import "fmt"

func main() {

    // 字符串作为for循环中的范围
    for i, j := range "XabCd" {
        fmt.Printf("%U 的索引值为 %d\n", j, i)
    }

}

输出:

U+0058 的索引值为 0
U+0061 的索引值为 1
U+0062 的索引值为 2
U+0043 的索引值为 3
U+0064 的索引值为 4

跳出循环

break语句

break:跳出循环体。break语句用于在结束其正常执行之前突然终止for循环

示例代码:

package main

import (  
    "fmt"
)

func main() {  
    for i := 1; i <= 10; i++ {
        if i > 5 {
            break //loop is terminated if i > 5
        }
        fmt.Printf("%d ", i)
    }
    fmt.Printf("\nline after for loop")
}

continue语句

continue:跳出一次循环。continue语句用于跳过for循环的当前迭代。在continue语句后面的for循环中的所有代码将不会在当前迭代中执行。循环将继续到下一个迭代。

示例代码:

package main

import (  
    "fmt"
)

func main() {  
    for i := 1; i <= 10; i++ {
        if i%2 == 0 {
            continue
        }
        fmt.Printf("%d ", i)
    }
}

goto语句

goto:可以无条件地转移到过程中指定的行。

语法结构:

goto label;
..
..
label: statement;

goto1

package main

import "fmt"

func main() {
   /* 定义局部变量 */
   var a int = 10

   /* 循环 */
   LOOP: for a < 20 {
      if a == 15 {
         /* 跳过迭代 */
         a = a + 1
         goto LOOP
      }
      fmt.Printf("a的值为 : %d\n", a)
      a++     
   }  
}