一、概述
Go语言的流程控制语句基本上继承了C/C++语言的所有流程控制语句。Go语言没有while和do...while语句,只能用for循环实现。
流程控制语句主要包括:条件判断语句(if和switch)、循环控制语句(for、break和continue)和跳转语句(goto)。
二、条件判断语句(if和switch)
1、if判断
if判断语句的语法格式:
if 表达式1 {
代码块1
}else if 表达式2 {
代码块2
}else{
代码块3
}
当表达式1执行结果为true,执行代码块1,否则对表达式2进行判断;若表达式2执行结果为true,执行代码块2,否则执行代码块3。
if判断语句中else if语句和else语句都是可选的,根据具体情况添加或去除。
注意:表达式后的左括号必须与表达式在同一行中,不然程序编译时会报错。
举例:
func main() {
a := 1
if a>1 {
fmt.Println(a,"> 1")
}else if a == 1 {
fmt.Println(a,"= 1")
}else {
fmt.Println(a,"< 1")
}
}
2、switch分支语句
switch语句常使用于大量不同条件执行不同代码块,每一个条件对应一个case分支。每一个switch语句只能包含一个default分支,若没有找到符合条件的case分支,会默认执行default分支语句中的代码块。switch语句语法格式如下:
switch var {
case value1:
代码块1
case value2:
代码块2
default:
代码块3
}
变量var可以是任意类型值,但是value1和value2必须是与var相同类型的值。每个case分支后可以跟多个可能符合条件的值,使用逗号隔开,例如:case value1,value2
举例:
func example01() {
fmt.Println("example01.......")
switch 2 {
case 1:
fmt.Println("该数字是1")
case 2:
fmt.Println("该数字是2")
case 3:
fmt.Println("该数字是3")
default:
fmt.Println("该数字不是1、2、3")
}
fmt.Println("-----------------\n")
}
默认情况下,switch匹配成功后就不会执行其他的case,如果我们需要无条件的强制执行后面的case,需要使用fallthrough关键字。
举例:
func example02() {
fmt.Println("example02.......")
switch {
//true 肯定执行
case true:
fmt.Println("true")
fallthrough
//false 肯定不执行,但因为上一个case语句加了fallthrough标签,所以也会执行
case false:
fmt.Println("false")
//fallthrough
default:
fmt.Println("默认")
}
fmt.Println("----------------")
}
三、循环控制语句(for、break和continue)
1、for循环语句
Go语言中的循环逻辑通过for关键字实现。Go语言没有while关键字,不存在while循环。
循环体中的代码会不断的被执行,直到条件表达式的结果为false,程序才会继续执行for循环之后的代码。for循环中初始语句、条件表达式和赋值表达式都是可选的。for循环语法格式如下:
for 初始语句;条件表达式;赋值表达式{
循环体
}
实例:
func main() {
for i := 1; i <= 5; i++ {
fmt.Println(i)
}
}
2、break跳出循环语句
break语句可以用来结束for循环,如果不带标签,则默认跳出最内层的for循环
实例:
func example1() {
fmt.Println("不带标签的break语句")
i := 1
for {
for {
if i>5 {
fmt.Println("跳出最内层for循环")
break
}
fmt.Println(i)
i++
}
fmt.Println("跳出最外层for循环")
break
}
fmt.Println("--------------\n")
}
break语句后面添加标签,表示退出标签对应的代码块逻辑
实例:
func example2() {
fmt.Println("使用带标签的break语句,直接跳出最外层for循环")
i := 1
OuterLoop:
for {
for {
if i>5 {
break OuterLoop //跳出OuterLoop标签对应的循环
}
fmt.Println(i)
i++
}
}
}
3、continue继续循环语句
continue语句可以立即结束当前循环体中的逻辑,开始下一次循环。和break语句类似,continue语句后也可以跟标签,表示开始标签所对应的循环。
实例:
func main() {
OuterLoop:
for i := 0; i < 2; i++ {
for j := 0; j < 3; j++ {
if j == 1 {
fmt.Println(i, j)
continue OuterLoop
}
}
}
}
四、跳转语句(goto)
goto语句用于代码间的无条件跳转,一般情况下,不建议使用goto语句,过多的goto语句会破坏程序结构,使程序可读性变差。goto语句的语法格式如下:
goto 标签
实例:
func main() {
fmt.Println("hello")
goto sign
fmt.Println("无效代码块")
sign:
fmt.Println("world")
}