05分支语句

一、程序的流程结构

程序的流程控制结构一共有三种:顺序结构,选择结构,循环结构。

顺序结构:从上向下,逐行执行。

选择结构:条件满足,某些代码才会执行。0-1次

分支语句:if,switch,select

循环结构:条件满足,某些代码会被反复的执行多次。0-N次

循环语句:for

二、条件语句

2.1 if 语句

语法格式:

if布尔表达式{/* 在布尔表达式为 true 时执行 */}

if布尔表达式{/* 在布尔表达式为 true 时执行 */}else{/* 在布尔表达式为 false 时执行 */}

if布尔表达式1{/* 在布尔表达式1为 true 时执行 */}elseif布尔表达式2{/* 在布尔表达式1为 false ,布尔表达式2为true时执行 */}else{/* 在上面两个布尔表达式都为false时,执行*/}

示例代码:

packagemainimport"fmt"funcmain(){/* 定义局部变量 */varaint=10 /* 使用 if 语句判断布尔表达式 */ifa<20{/* 如果条件为 true 则执行以下语句 */fmt.Printf("a 小于 20\n")}fmt.Printf("a 的值为 : %d\n",a)}

2.2 if 变体

如果其中包含一个可选的语句组件(在评估条件之前执行),则还有一个变体。它的语法是

ifstatement;condition{}ifcondition{        }

示例代码:

packagemainimport("fmt")funcmain(){ifnum:=10;num%2==0{//checks if number is evenfmt.Println(num,"is even")}else{fmt.Println(num,"is odd")}}

需要注意的是,num的定义在if里,那么只能够在该if..else语句块中使用,否则编译器会报错的。

2.3 switch语句:“开关”

switch是一个条件语句,它计算表达式并将其与可能匹配的列表进行比较,并根据匹配执行代码块。它可以被认为是一种惯用的方式来写多个if else子句。

switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上直下逐一测试,直到匹配为止。 switch 语句执行的过程从上至下,直到找到匹配项,匹配项后面也不需要再加break。

而如果switch没有表达式,它会匹配true

Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch, 但是可以使用fallthrough强制执行后面的case代码。

变量 var1 可以是任何类型,而 val1 和 val2 则可以是同类型的任意值。类型不被局限于常量或整数,但必须是相同的类型;或者最终结果为相同类型的表达式。 您可以同时测试多个可能符合条件的值,使用逗号分割它们,例如:case val1, val2, val3。

switchvar1{caseval1:...caseval2:...default:...}

示例代码:

packagemainimport"fmt"funcmain(){/* 定义局部变量 */vargradestring="B"varmarksint=90switchmarks{case90:grade="A"case80:grade="B"case50,60,70:grade="C"//case 后可以由多个数值default:grade="D"}switch{casegrade=="A":fmt.Printf("优秀!\n")casegrade=="B",grade=="C":fmt.Printf("良好\n")casegrade=="D":fmt.Printf("及格\n")casegrade=="F":fmt.Printf("不及格\n")default:fmt.Printf("差\n");}fmt.Printf("你的等级是 %s\n",grade);}

2.4 fallthrough

如需贯通后续的case,就添加fallthrough

packagemainimport("fmt")typedata[2]intfuncmain(){switchx:=5;x{default:fmt.Println(x)case5:x+=10fmt.Println(x)fallthroughcase6:x+=20fmt.Println(x)}}

运行结果:

1535

case中的表达式是可选的,可以省略。如果该表达式被省略,则被认为是switch true,并且每个case表达式都被计算为true,并执行相应的代码块。

示例代码:

packagemainimport("fmt")funcmain(){num:=75switch{// expression is omittedcasenum>=0&&num<=50:fmt.Println("num is greater than 0 and less than 50")casenum>=51&&num<=100:fmt.Println("num is greater than 51 and less than 100")casenum>=101:fmt.Println("num is greater than 100")}}

switch的注意事项

case后的常量值不能重复

case后可以有多个常量值

fallthrough应该是某个case的最后一行。如果它出现在中间的某个地方,编译器就会抛出错误。

2.5 Type Switch

switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际存储的变量类型。

switchx.(type){casetype:statement(s);casetype:statement(s);/* 你可以定义任意个数的case */default:/* 可选 */statement(s);}

packagemainimport"fmt"funcmain(){varxinterface{}    switchi:=x.(type){casenil:fmt.Printf(" x 的类型 :%T",i)caseint:fmt.Printf("x 是 int 型")casefloat64:fmt.Printf("x 是 float64 型")casefunc(int)float64:fmt.Printf("x 是 func(int) 型")casebool,string:fmt.Printf("x 是 bool 或 string 型")default:fmt.Printf("未知型")}}

运行结果:

x的类型:<nil>

千锋Go语言的学习群:784190273

作者B站:

https://space.bilibili.com/353694001

对应视频地址:

https://www.bilibili.com/video/av56018934

https://www.bilibili.com/video/av47467197

源代码:

https://github.com/rubyhan1314/go_foundation

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容