一、if else(分支结构)

1.1 if 条件判断基本写法

package main
import (
  "fmt"
)
func main() {
  score := 65
  if score >= 90 {
    fmt.Println("A")
  } else if score > 75 {
    fmt.Println("B")
  } else {
    fmt.Println("C")
  }
}

1.2 if 条件判断特殊写法

  • if 条件判断还有一种特殊的写法,可以在 if 表达式之前添加一个执行语句,再根据变量值进行判断

package main
import "fmt"
func main() {
  //这里的 score 是局部作用域
  if score := 56; score >= 90 {
    fmt.Println("A")
  } else if score > 75 {
    fmt.Println("B")
  }else {
    fmt.Println("C")
    fmt.Println(score) // 只能在函数内部打印 score
  }
  // fmt.Println(score) //undefined: score
}

二、for(循环结构)

2.1 for循环

1)普通for循环

package main
import "fmt"
func main() {
  // 打印: 0 ~ 9 的数字
  for i := 0; i < 10; i++ {
    fmt.Println(i)
  }
}

2)外部定义

package main
import "fmt"
func main() {
  i := 0
  for i < 10 {
    fmt.Println(i)
    i++
  }
}

3)省略初始语句

package main
import "fmt"
func main() {
  i := 0
  for ; i < 10; i++ {
    fmt.Println(i)
  }
}

2.2 打印 0-10 所有的偶数

package main
import "fmt"
func main() {
  // 0 2 4 6 8
  for i := 0; i < 10; i++ {
    if i%2 == 0 {
      fmt.Println(i)
    }
  }
}

2.3 嵌套循环

package main
import "fmt"
func main() {
  for i := 1; i <= 9; i++ {
    for j := 1; j <= i; j++ {
      fmt.Printf("%vx%v=%v \t", i, j, i*j)
    }
    fmt.Println()
  }
}
/*
1x1=1
2x1=2   2x2=4
3x1=3   3x2=6   3x3=9
4x1=4   4x2=8   4x3=12   4x4=16
5x1=5   5x2=10   5x3=15   5x4=20   5x5=25
6x1=6   6x2=12   6x3=18   6x4=24   6x5=30   6x6=36
7x1=7   7x2=14   7x3=21   7x4=28   7x5=35   7x6=42   7x7=49
8x1=8   8x2=16   8x3=24   8x4=32   8x5=40   8x6=48   8x7=56   8x8=64
9x1=9   9x2=18   9x3=27   9x4=36   9x5=45   9x6=54   9x7=63   9x8=72   9x9=81
*/

2.4 模拟while循环

  • Go 语言中是没有 while 语句的,我们可以通过 for 代替

package main
import "fmt"
func main() {
  k := 1
  for { // 这里也等价 for ; ; {
    if k <= 10 {
      fmt.Println("ok~~", k)
    } else {
      break   //break 就是跳出这个 for 循环
    }
    k++
  }
}

2.5 for range(键值循环)

package main
import "fmt"
func main() {
  str := "abc上海"
  for index, val := range str {
    fmt.Printf("索引=%d, 值=%c \n", index, val)
  }
}
/*
索引=0, 值=a
索引=1, 值=b
索引=2, 值=c
索引=3, 值=上
索引=6, 值=海
*/

三、switch case

  • 使用 switch 语句可方便地对大量的值进行条件判断

3.1 case一般用法

package main
import "fmt"
func main() {
  score := "B"
  switch score {
    case "A":
      fmt.Println("非常棒")
    case "B":
      fmt.Println("优秀")
    case "C":
      fmt.Println("及格")
    default:
      fmt.Println("不及格")
  }
}

3.2 case语句多个值

package main
import "fmt"
func main() {
  n := 2
  switch n {
  case 1, 3, 5, 7, 9:
    fmt.Println("奇数")
  case 2, 4, 6, 8:
    fmt.Println("偶数")
  default:
    fmt.Println(n)
  }
}

3.3 fallthrough 语法

  • fallthrough 语法可以执行满足条件的 case 的下一个 case,是为了兼容 C 语言中的 case 设计

package main
import "fmt"
func main() {
  s := "a"
  switch {
  case s == "a":
    fmt.Println("a")
    fallthrough
  case s == "b":
    fmt.Println("b")
  case s == "c":
    fmt.Println("c")
  default:
    fmt.Println("...")
  }
}
/*
a
b
 */

四、break、continue、goto

4.1 break跳出单循环

package main
import "fmt"
func main() {
  k := 1
  for { // 这里也等价 for ; ; {
    if k <= 10 {
      fmt.Println("ok~~", k)
    } else {
      break   //break 就是跳出这个 for 循环
    }
    k++
  }
}

4.2 跳出多重循环

  • 在多重循环中,可以用标号 label 标出想 break 的循环

package main
import "fmt"
func main() {
  lable2:
  for i := 0; i < 2; i++ {
    for j := 0; j < 10; j++ {
      if j == 2 {
        break lable2
      }
      fmt.Println("i j 的值:", i, "-", j)
    }
  }
}
/*
i j 的值: 0 - 0
i j 的值: 0 - 1
 */

4.3 continue(继续下次循环)

package main
import "fmt"
func main() {
  for i := 0; i < 2; i++ {
    for j := 0; j < 4; j++ {
      if j == 2 {
        continue
      }
      fmt.Println("i j 的值", i, "-", j)
    }
  }
}
/*
i j 的值 0 - 0
i j 的值 0 - 1
i j 的值 0 - 3
i j 的值 1 - 0
i j 的值 1 - 1
i j 的值 1 - 3
 */

4.4 goto(跳转到指定标签)

package main
import "fmt"
func main() {
  for i := 0; i < 10; i++ {
    for j := 0; j < 10; j++ {
      if j == 2 {
        goto breakTag  // // 设置退出标签
      }
      fmt.Printf("%v-%v\n", i, j)
    }
  }
  return
  breakTag:  // 标签
    fmt.Println("结束 for 循环")
}
/*
0-0
0-1
结束 for 循环
 */