顺序结构的程序虽然能解决计算、输出等问题,但是不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构。

1、单语句分支

  1. if 布尔表达式 { // 注意 花括号 { 必须与表达式同行
  2. /* 在布尔表达式为 true时执行 */
  3. }

4.1、分支语句 - 图1

  1. // 用于条件判断
  2. isLogin := true
  3. if isLogin {
  4. fmt.Println("hello sgg")
  5. }

2、双分支语句

双分支语句:顾名思义就是 二条分支二选一执行!
4.1、分支语句 - 图2

  1. // 用于条件判断
  2. isLogin := true
  3. if isLogin {
  4. fmt.Println("hello sgg")
  5. } else {
  6. fmt.Println("please you login")
  7. }

3、if 多分支语句

多分支即从比双分支更多的分支选择一支执行。
4.1、分支语句 - 图3

  1. score := 90
  2. if score > 90 {
  3. fmt.Println("成绩优秀")
  4. } else if score >= 80 {
  5. fmt.Println("成绩良好")
  6. } else if score >= 60 {
  7. fmt.Println("成绩及格")
  8. } else {
  9. fmt.Println("成绩不及格")
  10. }

不管多少条分支只能执行一条分支!

4、switch 多分支语句

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

4.1、分支语句 - 图4
switch语句也是多分支选择语句,执行哪一块代码块,取决于switch后的值与哪一case值匹配成功,则执行该case后的代码块。

  1. /*
  2. 给出如下选项,并根据选项进行效果展示:
  3. 输入1、2:则输出"普通攻击"
  4. 输入3:则输出"超级攻击"
  5. 输入4:则输出"使用道具"
  6. */
  7. var choice int
  8. fmt.Println("请输入选择:")
  9. fmt.Scan(&choice) // 标准输入
  10. switch choice {
  11. case 1, 2: // case 后面可以跟1到多个值,支持多个条件匹配
  12. fmt.Println("普通攻击")
  13. case 3:
  14. fmt.Println("超级攻击")
  15. case 4:
  16. fmt.Println("使用道具")
  17. default:
  18. fmt.Println("输入有误")
  19. }
  1. 1. switch if...else...更为简洁
  2. 2. 执行效率更高。switch...case... 会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的索引号与Switch变量的值是相等的。从而,switch....case...不用像if...else...那样去遍历条件分支直到命中条件,而只需访问对应索引号的表项从而到达定位分支的目的。
  3. 3. 到底使用哪一个选择语句,代码环境有关,如果是范围取值,则使用 if...else...语句更为快捷;如果是确定的值,则使用 switch 是更优方案。

5、分支嵌套

嵌套最多不要超过三层。

  1. score := 90
  2. if reflect.TypeOf(score).Name() == "int" {
  3. if score > 90 {
  4. fmt.Println("成绩优秀")
  5. } else if score >= 80 {
  6. fmt.Println("成绩良好")
  7. } else if score >= 60 {
  8. fmt.Println("成绩及格")
  9. } else {
  10. fmt.Println("成绩不及格")
  11. }
  12. }