Go Switch

switch语句

使用switch语句来选择要执行的多个代码块中的一个。

在Go中的switch语句类似于C、C++、Java、JavaScript和PHP中的switch语句。不同之处在于它只执行匹配的case,因此不需要使用break语句。

单一case的switch语法

1switch 表达式 { 2case x: 3 // 代码块 4case y: 5 // 代码块 6case z: 7 // ... 8default: 9 // 代码块 10}

它的工作方式如下:

  1. 表达式被评估一次。
  2. switch表达式的值与每个case的值进行比较。
  3. 如果匹配,则执行相关的代码块。
  4. 默认关键字是可选的。它指定了如果没有匹配的case时要运行的一些代码。

单一case的switch示例

下面的示例使用星期几的数字来计算星期几的名称:

1package main 2 3import ( 4 "fmt" 5) 6 7func main() { 8 day := 4 9 10 switch day { 11 case 1: 12 fmt.Println("星期一") 13 case 2: 14 fmt.Println("星期二") 15 case 3: 16 fmt.Println("星期三") 17 case 4: 18 fmt.Println("星期四") 19 case 5: 20 fmt.Println("星期五") 21 case 6: 22 fmt.Println("星期六") 23 case 7: 24 fmt.Println("星期日") 25 } 26} 27

结果:

1星期四

default关键字

default关键字指定了在没有匹配的case时要运行的一些代码:

1package main 2 3import ( 4 "fmt" 5) 6 7func main() { 8 day := 8 9 10 switch day { 11 case 1: 12 fmt.Println("星期一") 13 case 2: 14 fmt.Println("星期二") 15 case 3: 16 fmt.Println("星期三") 17 case 4: 18 fmt.Println("星期四") 19 case 5: 20 fmt.Println("星期五") 21 case 6: 22 fmt.Println("星期六") 23 case 7: 24 fmt.Println("星期日") 25 default: 26 fmt.Println("不是工作日") 27 } 28} 29

结果:

1不是工作日

所有case值应与switch表达式具有相同的类型。否则,编译器将引发错误。

1package main 2 3import ( 4 "fmt" 5) 6 7func main() { 8 a := 3 9 10 switch a { 11 case 1: 12 fmt.Println("a是一") 13 case "b": 14 fmt.Println("a是b") 15 } 16} 17

结果:

1./prog.go:11:2: 无法将类型为untyped string的"b"用作int类型

多个值的switch语句

在switch语句中,每个case可以有多个值:

语法

1switch 表达式 { 2case x, y: 3 // 代码块(如果表达式的值是x或y) 4case v, w: 5 // 代码块(如果表达式的值是v或w) 6case z: 7 // ... 8default: 9 // 代码块(如果表达式在任何case中都没有找到) 10}

多个值的switch示例

下面的示例使用星期几的数字返回不同的文本:

1package main 2 3import ( 4 "fmt" 5) 6 7func main() { 8 day := 5 9 10 switch day { 11 case 1, 3, 5: 12 fmt.Println("奇数工作日") 13 case 2, 4: 14 fmt.Println("偶数工作日") 15 case 6, 7: 16 fmt.Println("周末") 17 default: 18 fmt.Println("无效的日期编号") 19 } 20}

结果:

1奇数工作日

最后

为了方便其他设备和平台的小伙伴观看往期文章,链接奉上:

公众号搜索Let us Coding知乎开源中国CSDN思否掘金InfoQ简书博客园慕课51CTOhelloworld腾讯开发者社区阿里开发者社区

看完如果觉得有帮助,欢迎点赞、收藏关注

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

PPDB:今晚老齐直播

【今晚老齐直播】今晚(本周三晚)20:0021:00小白开始“用”飞桨(https://www.oschina.net/action/visit/ad?id1185)由PPDE(飞桨(https://www.oschina.net/action/visit/ad?id1185)开发者专家计划)成员老齐,为深度学习小白指点迷津。

VBox 启动虚拟机失败

在Vbox(5.0.8版本)启动Ubuntu的虚拟机时,遇到错误信息:NtCreateFile(\\Device\\VBoxDrvStub)failed:0xc000000034STATUS\_OBJECT\_NAME\_NOT\_FOUND(0retries) (rc101)Makesurethekern

FLV文件格式

1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.