条件语句

条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为 true 来决定是否执行指定语句

下图展示了程序语言中条件语句的结构

if.png

单条件模型

if 语句 由一个布尔表达式后紧跟一个或多个语句组成

语法: Go 编程语言中 if 语句的语法如下:

  1. if 布尔表达式 {
  2. /* 在布尔表达式为 true 时执行 */
  3. } else {
  4. /* 在布尔表达式为 false 时执行 */
  5. }

实例

  1. package main
  2. import "fmt"
  3. func main() {
  4. /* 局部变量定义 */
  5. var a int = 100;
  6. /* 判断布尔表达式 */
  7. if a < 20 {
  8. /* 如果条件为 true 则执行以下语句 */
  9. fmt.Printf("a 小于 20\n" );
  10. } else {
  11. /* 如果条件为 false 则执行以下语句 */
  12. fmt.Printf("a 不小于 20\n" );
  13. }
  14. fmt.Printf("a 的值为 : %d\n", a);
  15. }

多条件模型(else if)

如果我们有多个条件需要判断, 可以使用多条件语句
ifelse.png

语法: Go 编程语言中 if…else if…else if…else 语句的语法如下:

  1. if 布尔表达式 1 {
  2. /* 在布尔表达式 1 为 true 时执行 */
  3. } else if 布尔表达式 2 {
  4. /* 在布尔表达式 1 为 true 时执行 */
  5. } else if 布尔表达式 n {
  6. /* 在布尔表达式 1 为 true 时执行 */
  7. } else {
  8. /* 以上条件都不满足时执行 */
  9. }
  1. var age int = 18
  2. if age < 18 {
  3. fmt.Println("nice")
  4. } else if age < 28 {
  5. fmt.Println("beauty")
  6. } else if age < 38 {
  7. fmt.Println("sexy")
  8. } else {
  9. fmt.Println("next")
  10. }

条件嵌套

你可以在 if 或 else if 语句中嵌入一个或多个 if 或 else if 语句

实例

  1. package main
  2. import "fmt"
  3. func main() {
  4. /* 定义局部变量 */
  5. var a int = 100
  6. var b int = 200
  7. /* 判断条件 */
  8. if a == 100 {
  9. /* if 条件语句为 true 执行 */
  10. if b == 200 {
  11. /* if 条件语句为 true 执行 */
  12. fmt.Printf("a 的值为 100 , b 的值为 200\n" );
  13. }
  14. }
  15. fmt.Printf("a 值为 : %d\n", a );
  16. fmt.Printf("b 值为 : %d\n", b );
  17. }

多层嵌套不利于代码的阅读, 比如下面这个:

  1. // 身高1.8m以上, 25 ~ 35岁, 男
  2. var (
  3. height float32
  4. age uint
  5. gender string
  6. passed bool
  7. )
  8. height = 1.9
  9. age = 30
  10. gender = "male"
  11. if height > 1.8 {
  12. if age > 25 && age <= 35 {
  13. if gender == "male" {
  14. passed = true
  15. }
  16. }
  17. }
  18. if passed {
  19. fmt.Println("congratulations! your successed")
  20. } else {
  21. fmt.Println("not passed")
  22. }

我们可以通过提前返回来优化这段代码

switch条件判断

我们经常会遇到值的比较判断, 常见与枚举比较:

  1. const (
  2. Unknown = iota
  3. Male
  4. Female
  5. )
  6. gender := 0
  7. if gender == Unknown {
  8. } else if gender == Male {
  9. } else if gender == Female {
  10. } else {
  11. fmt.Println()
  12. }

如果遇到这种对值得比较,我们可以使用switch, 这样逻辑清晰.
我们switch 改造下:

  1. gender := 0
  2. switch gender {
  3. case Unknown:
  4. case Male:
  5. case Female:
  6. default:
  7. fmt.Println()
  8. }

基本用法

语法: Go 编程语言中 switch 语句的语法如下:

  1. switch var1 {
  2. case val1:
  3. ...
  4. case val2:
  5. ...
  6. default:
  7. ...
  8. }

实例1: 给用分数评级, 并打印结果

  1. /* 定义局部变量 */
  2. var grade string = "B"
  3. var marks int = 90
  4. switch marks {
  5. case 90: grade = "A"
  6. case 80: grade = "B"
  7. case 50,60,70 : grade = "C"
  8. default: grade = "D"
  9. }
  10. switch {
  11. case grade == "A" :
  12. fmt.Printf("优秀!\n" )
  13. case grade == "B", grade == "C" :
  14. fmt.Printf("良好\n" )
  15. case grade == "D" :
  16. fmt.Printf("及格\n" )
  17. case grade == "F":
  18. fmt.Printf("不及格\n" )
  19. default:
  20. fmt.Printf("差\n" );
  21. }
  22. fmt.Printf("你的等级是 %s\n", grade );

fallthrough 的用法

switch 默认情况下 case 最后自带 break 语句,匹配成功后就不会执行其他 case,如果我们需要执行后面的 case,可以使用 fallthrough

实例: 下面将打印那些语句?

  1. switch {
  2. case false:
  3. fmt.Println("1、case 条件语句为 false")
  4. fallthrough
  5. case true:
  6. fmt.Println("2、case 条件语句为 true")
  7. fallthrough
  8. case false:
  9. fmt.Println("3、case 条件语句为 false")
  10. fallthrough
  11. case true:
  12. fmt.Println("4、case 条件语句为 true")
  13. case false:
  14. fmt.Println("5、case 条件语句为 false")
  15. fallthrough
  16. default:
  17. fmt.Println("6、默认 case")
  18. }

多条件匹配

  1. switch{
  2. case 1,2,3,4:
  3. default:
  4. }

比如我们第一名: 冠军, 第二名: 亚军, 第三名和第四名并列季军, 已经其他排不上号的

break

如果想要执行多个 case,需要使用 fallthrough 关键字,也可用 break 终止

  1. switch{
  2. case 1:
  3. ...
  4. if(...){
  5. break
  6. }
  7. fallthrough // 此时switch(1)会执行case1和case2,但是如果满足if条件,则只执行case1
  8. case 2:
  9. ...
  10. case 3:
  11. }