10。开关语句
开关是一个条件语句,用于将表达式的值与可能匹配的选项列表进行比较,并根据匹配情况执行相应的代码块。它可以被认为是替代多个<代码>如果其他代码>子句的常用方式。
看代码比文字更容易理解。让我们从一个简单的例子开始,它将把一个手指的编号作为输入,然后输出该手指对应的名字。比如0是拇指,1是食指等等。
<代码类=" language-go ">包主要 导入( “fmt” ) 函数main () { 手指:=4 开关的手指{ 案例1: fmt.Println(“拇指”) 案例2: fmt.Println(“指数”) 案例3: fmt.Println(“中产”) 案例4: fmt.Println(“环”) 例5: fmt.Println(“的”) } }代码>
在上述程序中,<代码> 代码>将开关手指手指<代码> 代码>的值与每个<代码>中> 代码语句进行比较,通过从上到下对每一个值进行对比,并执行与选项值匹配的第一个逻辑。在上述样例中,<代码>手指> 代码值为4,因此打印的结果是<代码> 代码>。
在选项列表中,<代码>中> 代码不允许出现重复项。如果您尝试运行下面的程序,编译器会报这样的错误:<代码>主要。:18:2:在tmp/sandbox887814166/main.go:十六7 代码>
<代码类=" language-go ">包主要 导入( “fmt” ) 函数main () { 手指:=4 开关的手指{ 案例1: fmt.Println(“拇指”) 案例2: fmt.Println(“指数”) 案例3: fmt.Println(“中产”) 案例4: fmt.Println(“环”) 案例4://重复项 fmt。Println(另一个“环”) 例5: fmt.Println(“的”) } }代码>
默认情况(默认情况下)
我们每个人一只手只有5个手指。如果我们输入了不正确的手指编号会发生什么?这个时候就应该是属于默认情况。当其他情况都不匹配时,将运行默认情况。
<代码类=" language-go ">包主要 导入( “fmt” ) 函数main () { 开关的手指:=8;手指{ 案例1: fmt.Println(“拇指”) 案例2: fmt.Println(“指数”) 案例3: fmt.Println(“中产”) 案例4: fmt.Println(“环”) 例5: fmt.Println(“的”) 默认值://默认情况 fmt。Println(“不正确的手指数量”) } }代码>
在上述程序中手指<代码> 代码>的值是8,它不符合其中任何情况,因此会打印<代码>不正确的手指数量> 代码.default不一定只能出现在开关语句的最后,它可以放在开关语句的任何地方。
您可能也注意到我们稍微改变了<代码> 代码>手指变量的声明方式。代码> <代码>手指声明在了开关语句内。在表达式求值之前,开关可以选择先执行一个语句。在这行<代码>开关手指:=8;手指代码>中,先声明了<代码> 代码>手指变量,随即在表达式中使用了它。在这里,手指<代码> 代码>变量的作用域仅限于这个开关内。
多表达式判断
通过用逗号分隔,可以在一个案件中包含多个表达式。
<代码类=" language-go ">包主要 导入( “fmt” ) 函数main () { 信:="我" 开关信{ 案例“a”、“e”、“我”、“o”、“u”://一个选项多个表达式 fmt.Println(“元音”) 默认值: fmt。Println(不是“元音”) } }代码>
在<代码>“a”,“e”,“我”、“o”、“u”: 代码>这一行中,列举了所有的元音。只要匹配该项,则将输出<代码>元音代码>。
无表达式的开关/h3>
开关语在句中,表达式是可选的,可以被省略。如果省略表达式,则表示这个开关语句等同于<代码>开关真正> 代码,并且每个<代码>中> 代码表达式都被认定为有效,相应的代码块也会被执行。
<代码类=" language-go ">包主要 导入( “fmt” ) 函数main () { num:=75 {//切换表达式被省略了 案例num祝辞=0,,num & lt;=50: fmt。Println (“num大于0小于50”) 51例num祝辞=,,num & lt;=100: fmt。Println (“num大于51和不到100”) 案例num祝辞=101: fmt。Println (num大于100) } }代码>
在上述代码中,开关中缺少表达式,因此默认它为真,真值会和每一个案件的求值结果进行匹配。