go基础 | 青训营笔记

64 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天

7、循环语句

 Go 语言的 For 循环有 3 种形式,只有其中的一种使用分号。
 ​
 和 C 语言的 for 一样:
 for init; condition; post { }
 ​
 和 C 的 while 一样:
 for condition { }
 ​
 和 C 的 for(;;) 一样:
 for { }
 ​
 init: 一般为赋值表达式,给控制变量赋初值;
 condition: 关系表达式或逻辑表达式,循环控制条件;
 post: 一般为赋值表达式,给控制变量增量或减量。
 ​
 执行顺序就是和其他语言一样的:先赋值 后判断条件 然后执行循环体 然后进行变量的修改

1、迭代循环

 for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。格式如下:
 for key, value := range oldMap {
     newMap[key] = value
 }
 以上代码中的 key 和 value 是可以省略。
 如果只想读取 key,格式如下:
 for key := range oldMap
 或者这样:
     for key, _ := range oldMap
 如果只想读取 value,格式如下:
     for _, value := range oldMap

2、实例

 无限循环:
 package main
 ​
 import "fmt"
 ​
 func main() {
    sum := 0
    for {  // 不写条件默认true
       sum++ // 无限循环下去
    }
    fmt.Println(sum) // 无法输出
 }
 ​
 ​
 For-each range 循环
 这种格式的循环可以对字符串、数组、切片等进行迭代输出元素。
 package main
 import "fmt"
 ​
 func main() {
    strings := []string{"google", "runoob"}
    for i, s := range strings { // 类似python的迭代遍历
       fmt.Println(i, s)
    }
 ​
 ​
    numbers := [6]int{1, 2, 3, 5}
    for i,x:= range numbers {
       fmt.Printf("第 %d 位 x 的值 = %d\n", i,x)
    }  
 }
 // 运行结果
 0 google
 1 runoob
 第 0 位 x 的值 = 1
 第 1 位 x 的值 = 2
 第 2 位 x 的值 = 3
 第 3 位 x 的值 = 5
 第 4 位 x 的值 = 0
 第 5 位 x 的值 = 0
 ​
 for 循环的 range 格式可以省略 key 和 value,如下实例:
 package main
 import "fmt"
 ​
 func main() {
     map1 := make(map[int]float32)
     map1[1] = 1.0
     map1[2] = 2.0
     map1[3] = 3.0
     map1[4] = 4.0
    
     // 读取 key 和 value
     for key, value := range map1 {
       fmt.Printf("key is: %d - value is: %f\n", key, value)
     }
 ​
     // 读取 key
     for key := range map1 {
       fmt.Printf("key is: %d\n", key)
     }
 ​
     // 读取 value
     for _, value := range map1 { // 这里就需要_去抵消掉key
       fmt.Printf("value is: %f\n", value)
     }
 }
 key is: 4 - value is: 4.000000
 key is: 1 - value is: 1.000000
 key is: 2 - value is: 2.000000
 key is: 3 - value is: 3.000000
 key is: 1
 key is: 2
 key is: 3
 key is: 4
 value is: 1.000000
 value is: 2.000000
 value is: 3.000000
 value is: 4.000000

3、控制语句

 break continue goto goto和c语言的一模一样
 goto label;
 ..
 .
 label: statement;
 ​
 package main
 ​
 import "fmt"
 ​
 func main() {
    /* 定义局部变量 */
    var a int = 10
 ​
    /* 循环 */
    LOOP: for a < 20 {
       if a == 15 { // 如果等于15了 a+1 但是不输出了 因为下面的goto loop 又到for了 这里作用类似continue了
          /* 跳过迭代 */
          a = a + 1
          goto LOOP
       }
       fmt.Printf("a的值为 : %d\n", a)
       a++    
    }  
 }