Go 条件判断和for循环

127 阅读3分钟
  1. 条件判断(if - else语句)

    • 基本语法
      • 在Go语言中,if语句用于根据条件执行不同的代码块。基本格式为:
      if condition {
          // 当condition为真时执行的代码块
      } else {
          // 当condition为假时执行的代码块
      }
      
      • 其中,condition是一个布尔表达式,例如x > 5len(str) == 0等。例如:
      x := 10
      if x > 5 {
          fmt.Println("x is greater than 5")
      } else {
          fmt.Println("x is less than or equal to 5")
      }
      
    • 多个条件判断(if - else if - else
      • 可以使用else if来检查多个条件。格式如下:
      if condition1 {
          // 当condition1为真时执行的代码块
      } else if condition2 {
          // 当condition2为真时执行的代码块
      } else {
          // 当所有条件都为假时执行的代码块
      }
      
      • 例如,判断一个数的正负性:
      x := -3
      if x > 0 {
          fmt.Println("x is positive")
      } else if x < 0 {
          fmt.Println("x is negative")
      } else {
          fmt.Println("x is zero")
      }
      
    • if语句中声明变量
      • 可以在if语句的条件部分声明变量,这个变量的作用域仅限于if语句块及其相关的else ifelse块。例如:
      if y := 2 * x; y > 10 {
          fmt.Println("y is greater than 10")
      } else {
          fmt.Println("y is less than or equal to 10")
      }
      // 注意:这里y的作用域仅限于这个if - else语句块,在外部无法访问y
      
  2. for循环

    • 基本for循环
      • 基本格式为for init; condition; post { // 循环体 }。其中,init是初始化语句,通常用于初始化循环变量;condition是循环条件,只要这个条件为真,循环就会继续;post是每次循环结束后执行的语句,通常用于更新循环变量。例如:
      for i := 0; i < 5; i++ {
          fmt.Println(i)
      }
      
      • 这个循环会打印出0到4,首先i被初始化为0,然后检查i < 5是否成立,如果成立则执行循环体(打印i),最后执行i++更新循环变量,再次检查循环条件,直到i < 5不成立为止。
    • 省略部分的for循环
      • 可以省略initconditionpost部分。如果省略condition部分,循环会一直执行,除非在循环体内部使用break语句跳出循环。例如,下面是一个无限循环:
      for {
          // 无限循环体内容
          break // 如果没有break,这将是一个无限循环
      }
      
      • 也可以只写condition部分,这种形式类似于其他语言中的while循环。例如:
      i := 0
      for i < 5 {
          fmt.Println(i)
          i++
      }
      
    • for - range循环(用于遍历数据结构)
      • 用于遍历数组、切片、字符串、map等数据结构。例如,遍历一个切片:
      slice := []int{1, 2, 3, 4, 5}
      for index, value := range slice {
          fmt.Printf("Index: %d, Value: %d\n", index, value)
      }
      
      • 当遍历字符串时,index是字符的索引(字节索引,对于UTF - 8编码的多字节字符需要注意),value是字符(字节值)。例如:
      str := "Hello"
      for index, char := range str {
          fmt.Printf("Index: %d, Char: %c\n", index, char)
      }
      
      • 当遍历map时,index是键,value是值,不过map的遍历顺序是不确定的。例如:
      m := map[string]int{"a": 1, "b": 2}
      for key, value := range m {
          fmt.Printf("Key: %s, Value: %d\n", key, value)
      }