1.4 Go语言-switch语句(转)
与串联的if
语句类似,switch
语句提供了一个多分支条件执行的方法。不过在这里用一个专有名词来代表分支——case
。每一个case
可以携带一个表达式或一个类型说明符。前者又可被简称为case
表达式。因此,Go语言的switch
语句又分为表达式switch
语句和类型switch
语句。
先说表达式switch
语句。在此类switch
语句中,每个case
会携带一个表达式。与if
语句中的条件表达式不同,这里的case
表达式的结果类型并不一定是bool
。不过,它们的结果类型需要与switch
表达式的结果类型一致。所谓switch
表达式是指switch
语句中要被判定的那个表达式。switch
语句会依据该表达式的结果与各个case
表达式的结果是否相同来决定执行哪个分支。请看下面的示例:
var name string
// 省略若干条语句
switch name {
case "Golang":
fmt.Println("A programming language from Google.")
case "Rust":
fmt.Println("A programming language from Mozilla.")
default:
fmt.Println("Unknown!")
}
可以看到,在上述switch
语句中,name
充当了switch
表达式,而"Go"
和"Rust"
充当了case
表达式。它们的结果类型是一致的,都是string
。顺便说一句,可以有只包含一个字面量或标识符的表达式。它们是最简单的表达式,属于基本表达式的一种。
请大家注意switch
语句的写法。switch
表达式必须紧随switch
关键字出现。在后面的花括号中,一个关键字case
、case
表达式、冒号以及后跟的若干条语句组成为一条case
语句。在switch
语句中可以有若干条case
语句。Go语言会依照从上至下的顺序对每一条case
语句中case
表达式进行求值。只要被发现其表达式与switch
表达式的结果相同,该case
语句就会被选中。它包含的那些语句就会被执行。而其余的case
语句则会被忽略。
switch
语句中还可以存在一个特殊的case
——default case
。顾名思义,当没有一个常规的case
被选中的时候,default
case
就会被选中。上面示例中就存在一个default case
。它由关键字default
、冒号和后跟的一条语句组成。实际上,default case
不一定被追加在最后。它可以是第一个case
,或者出现在任意顺位上。
另外,与if
语句一样,switch
语句还可以包含初始化子句,且其出现位置和写法也如出一辙。如:
names := []string{"Golang", "Java", "Rust", "C"}
switch name := names[]; name {
case "Golang":
fmt.Println("A programming language from Google.")
case "Rust":
fmt.Println("A programming language from Mozilla.")
default:
fmt.Println("Unknown!")
}
好了,我们已经对switch
语句的一般形式——表达式switch
语句——有所了解了。下面我们来说说类型switch
语句。它与一般形式有两点差别。第一点,紧随case
关键字的不是表达式,而是类型说明符。类型说明符由若干个类型字面量组成,且多个类型字面量之间由英文逗号分隔。第二点,它的switch
表达式是非常特殊的。这种特殊的表达式也起到了类型断言的作用,但其表现形式很特殊,如:v.(type)
,其中v
必须代表一个接口类型的值。注意,该类表达式只能出现在类型switch
语句中,且只能充当switch
表达式。一个类型switch
语句的示例如下:
v :=
switch i := interface{}(v).(type) {
case int, int8, int16, int32, int64:
fmt.Printf("A signed integer: %d. The type is %T. \n", i, i)
case uint, uint8, uint16, uint32, uint64:
fmt.Printf("A unsigned integer: %d. The type is %T. \n", i, i)
default:
fmt.Println("Unknown!")
}
请注意,我们在这里把switch
表达式的结果赋给了一个变量。如此一来,我们就可以在该switch
语句中使用这个结果了。这段代码被执行后,标准输出上会打印出A signed integer: 11. The type is int.
。
最后,我们来说一下fallthrough
。它既是一个关键字,又可以代表一条语句。fallthrough
语句可被包含在表达式switch
语句中的case
语句中。它的作用是使控制权流转到下一个case
。不过要注意,fallthrough
语句仅能作为case
语句中的最后一条语句出现。并且,包含它的case
语句不能是其所属switch
语句的最后一条case
语句。
1.4 Go语言-switch语句(转)的更多相关文章
- R语言Switch语句
R语言Switch语句 switch语句允许一个变量值的列表来平等进行测试.每个值被称为一个条件(情况),变量被接通检查每个条件(情况). 语法 在R语言中创建switch语句的基本语法是: 以下规则 ...
- C语言switch语句
C语言虽然没有限制 if else 能够处理的分支数量,但当分支过多时,用 if else 处理会不太方便,而且容易出现 if else 配对出错的情况.例如,输入一个整数,输出该整数对应的星期几的英 ...
- C语言-switch语句的使用。对文件的输出处理。for循环和if的结合使用。
//函数fun功能:统计字符串中各元音字母的个数,注意:不区分大小写. //重难点:switch语句的使用. #include <stdlib.h> #include <conio. ...
- PROCESS_YIELD()宏和C语言的switch语句< contiki学习笔记之七>
写在前面: 按照main()函数的代码一行一行的分析,该是看到了 etimer_process 这个位置.但是etimer_process实现里的一个宏 PROCESS_YIELD()引出了很多故事 ...
- go语言基础之switch语句 和 fallthrough 用途
Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch, 但是可以使用fallthrough强制执行后面的case代码: 示例1 ...
- go语言之if语句和switch语句和循环语句
1.if语句 package main import ( "fmt" "io/ioutil" ) func main() { //流程控制 //使用常量定义一个 ...
- 【C语言】-条件语句-switch语句
switch语句: 用于直接处理不同情况下的多路问题. switch语句又可称为开关语句,其执行流程和多分支if语句类似. switch (表达式) { case 常量表达式1:语句组1;break; ...
- C语言-switch语句
switch (表达式的值) { case 1: 语句1 break; case 2: 语句2 break; case 3: 语句3 break; case 4: 语句4 break; ...... ...
- C语言switch中case后跟随break语句
1.case后面的常量表达式实际上只起语句标号作用,而不起条件判断作用,即“只是开始执行处的入口标号”.因此,一旦与switch后面圆括号中表达式的值匹配,就从此标号处开始执行:而且执行完一个case ...
随机推荐
- iOS 聊天界面
#import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @pr ...
- Blender 软件 四视图布局的创建方法
Blender 软件 四视图布局的创建方法 我使用的Blender版本:Blender V 2.77 Q: 为什么要创建一个:四视图布局场景? A: 原因1:四视图布局最适合模型建模.原因2:在 Bl ...
- Luogu 2737 [USACO4.1]麦香牛块Beef McNuggets
NOIP2017 D1T1 的结论,两个数$a, b$所不能表示出的最大的数为$a * b - a - b$. 听了好几遍证明我还是不会 注意到本题中给出的数都非常小,所以最大不能表示出的数$\leq ...
- 去掉utf-8的Bom头:使用java以及jdbc不使用第三方库执行sql文件脚本
package com.xxx.xxx.dao; import java.io.BufferedReader; import java.io.File; import java.io.FileInpu ...
- POJ 3411 Paid Roads (状态压缩+BFS)
题意:有n座城市和m(1<=n,m<=10)条路.现在要从城市1到城市n.有些路是要收费的,从a城市到b城市,如果之前到过c城市,那么只要付P的钱, 如果没有去过就付R的钱.求的是最少要花 ...
- enum枚举型
在实际编程中,有些数据的取值往往是有限的,只能是非常少量的整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月,一个班每周有六门课程等. 以每周七天为例, ...
- adobe flash player 过期问题
在百度搜索 " adobe flash player debugger",如图打开官网 https://www.adobe.com/support/flashplayer/debu ...
- EIP权限工作流升级说明-2019/3/5
首页增加待办事项直接处理按钮 2,新增处理历史记录
- UWP&WP8.1 基础控件—Button
Button作为最常用的控件,没有特别难的用法,是一个非常简单,可以很快就掌握的控件. Button 基础用法: 同样,在UWP项目中,可以从工具箱中拖拽到面板中进行使用.也可以使用XAML语法进行编 ...
- [51nod1239] 欧拉函数之和(杜教筛)
题面 传送门 题解 话说--就一个杜教筛--刚才那道拿过来改几行就行了-- //minamoto #include<bits/stdc++.h> #define R register #d ...