我是靠谱客的博主 顺利猫咪,最近开发中收集的这篇文章主要介绍go 的 switch 分支控制一 基本的介绍二 基本语法三 switch 的流程图四 快速入门五 switch 的使用的注意事项和细节六 switch 小练习七 switch 和 if 的比较,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一 基本的介绍

1 switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上到下逐一测试,直到匹配为止。

2 匹配项后面不需要再加 break

二 基本语法

switch 表达式{
    case 表达式1,表达式2...
        语句块1
    case 表达式3,表达式4...
        语句块2
    // 这里可以有多个case语句
        default:
                语句块
}

三 switch 的流程图

对上图的说明和总结

1 switch 的执行的流程是,先执行表达式,得到值,然后和 case 的表达式进行比较,如果相等,就匹配到,然后执行对应的 case 的语句块,然后退出 switch 控制。

2 如果 switch 的表达式的值没有和任何的 case 的表达式匹配成功,则执行 default 的语句块。执行后退出 switch 的控制。

3 golang 的 case 后的表达式可以有多个,使用逗号间隔。

4 golang 中的 case 语句块不需要写 break , 因为默认会有,即在默认情况下,当程序执行完 case 语句块后,就直接退出该 switch 控制结构。

四 快速入门

1 要求

编写一个程序,该程序可以接收一个字符,比如: a,b,c,d,e,f,g a表示星期一,b表示星期二 … 根据用户的输入显示相依的信息,要求使用 switch 语句完成

2 代码

package main

import (
   "fmt"
)

func test(char byte) byte {
   return char + 1
}

func main() {
   var key byte
   fmt.Println("请输入一个字符 a,b,c,d,e,f,g")
   fmt.Scanf("%c", &key)

   switch test(key) + 1 {
   case 'a':
      fmt.Println("周一, 猴子穿新衣")
   case 'b':
      fmt.Println("周二,猴子当小二")
   case 'c':
      fmt.Println("周三,猴子爬雪山")
   // 默认
   default:
      fmt.Println("输入有误...")
   }
}

3 测试

请输入一个字符 a,b,c,d,e,f,g
a
周三,猴子爬雪山

五 switch 的使用的注意事项和细节

1 case/switch 后是一个表达式( 即: 常量值、变量、一个有返回值的函数等都可以)。

参考快速入门。

2 case 后的各个表达式的值的数据类型,必须和 switch 的表达式数据类型一致。

3 case 后面可以带多个表达式,使用逗号间隔。比如 case 表达式 1, 表达式 2 ...

package main

import "fmt"

func main() {
   var n1 int32 = 5
   var n2 int32 = 20
   switch n1 {
   case n2, 10, 5: // case 后面可以有多个表达式
      fmt.Println("ok1")
   case 90:
      fmt.Println("ok2~")
   }
}

测试结果

ok1

4 case 后面的表达式如果是常量值(字面量),则要求不能重复。

5 case 后面不需要带 break , 程序匹配到一个 case 后就会执行对应的代码块,然后退出 switch,如果一个都匹配不到,则执行 default。

6 default 语句不是必须的。

7 switch 后也可以不带表达式,类似 if --else 分支来使用。

package main

import "fmt"

func main() {
   // switch 后也可以不带表达式,类似 if --else分支来使用。
   var age int = 10
   switch {
   case age == 10:
      fmt.Println("age == 10")
   case age == 20:
      fmt.Println("age == 20")
   default:
      fmt.Println("没有匹配到")
   }
   // case 中也可以对范围进行判断
   var score int = 90
   switch {
   case score > 90:
      fmt.Println("成绩优秀..")
   case score >= 70 && score <= 90:
      fmt.Println("成绩优良...")
   case score >= 60 && score < 70:
      fmt.Println("成绩及格...")
   default:
      fmt.Println("不及格")
   }
}

测试结果

age == 10
成绩优良...

8 switch 后也可以直接声明/定义一个变量,分号结束, 不推荐。 

package main

import "fmt"

func main() {
   // switch 后也可以直接声明/定义一个变量,分号结束,不推荐
   switch grade := 90; { // 在golang中,可以这样写
   case grade > 90:
      fmt.Println("成绩优秀~..")
   case grade >= 70 && grade <= 90:
      fmt.Println("成绩优良~...")
   case grade >= 60 && grade < 70:
      fmt.Println("成绩及格~...")
   default:
      fmt.Println("不及格~")
   }
}

测试

成绩优良~...

9 switch 穿透-fallthrough ,如果在 case 语句块后增加 fallthrough ,则会继续执行下一个 case,也叫 switch 穿透。

package main

import "fmt"

func main() {
   // switch 的穿透 fallthrought
   var num int = 10
   switch num {
   case 10:
      fmt.Println("ok1")
      fallthrough // 默认只能穿透一层
   case 20:
      fmt.Println("ok2")
      fallthrough
   case 30:
      fmt.Println("ok3")
   default:
      fmt.Println("没有匹配到..")
   }
}

测试结果

ok1
ok2
ok3

10 Type Switch:switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际指向的变量类型。

六 switch 小练习

1 使用 switch 把小写类型的 char 型转为大写(键盘输入)。只转换 a, b, c, d, e. 其它的输出“other”。

代码

package main

import (
   "fmt"
)

func main() {
   // 1 使用 switch 把小写类型的 char型转为大写(键盘输入)
   // 只转换 a, b, c, d, e. 其它的输出 “other”。
   var char byte
   fmt.Println("请输入一个字符..")
   fmt.Scanf("%c", &char)

   switch char {
   case 'a':
      fmt.Println("A")
   case 'b':
      fmt.Println("B")
   case 'c':
      fmt.Println("C")
   case 'd':
      fmt.Println("D")
   case 'e':
      fmt.Println("E")
   default:
      fmt.Println("other")
   }
}

测试

请输入一个字符..
a
A

2 对学生成绩大于 60 分的,输出“合格”。低于 60 分的,输出“不合格”。(注:输入的成绩不能大于 100)

代码

package main

import "fmt"

func main() {
   // 2 对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。
   // (注:输入的成绩不能大于100)

   var score float64
   fmt.Println("请输入成绩")
   fmt.Scanln(&score)

   switch int(score / 60) {
   case 1:
      fmt.Println("及格")
   case 0:
      fmt.Println("不及格")
   default:
      fmt.Println("输入有误..")
   }
}

测试

请输入成绩
80
及格

3 根据用户指定月份,打印该月份所属的季节。3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季

代码

package main

import "fmt"

func main() {
   var month byte
   fmt.Println("请输入月份")
   fmt.Scanln(&month)
   switch month {
   case 3, 4, 5:
      fmt.Println("spring")
   case 6, 7, 8:
      fmt.Println("summer")
   case 9, 10, 11:
      fmt.Println("autumn")
   case 12, 1, 2:
      fmt.Println("winter")
   default:
      fmt.Println("输入有误..")
   }
}

测试

请输入月份
5
spring

七 switch 和 if 的比较

总结了什么情况下使用 switch ,什么情况下使用 if。

1 如果判断的具体数值不多,而且符合整数、浮点数、字符、字符串这几种类型。建议使用 swtich语句,简洁高效。

2 其他情况:对区间判断和结果为 bool 类型的判断,使用 if,if 的使用范围更广。

最后

以上就是顺利猫咪为你收集整理的go 的 switch 分支控制一 基本的介绍二 基本语法三 switch 的流程图四 快速入门五 switch 的使用的注意事项和细节六 switch 小练习七 switch 和 if 的比较的全部内容,希望文章能够帮你解决go 的 switch 分支控制一 基本的介绍二 基本语法三 switch 的流程图四 快速入门五 switch 的使用的注意事项和细节六 switch 小练习七 switch 和 if 的比较所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部