从零开始学Go之基本(四):流程控制语句
Go中的流程控制语句有:if(else),for,switch
if:(判断流程控制)
关键字 if 是用于测试某个条件(布尔型或逻辑型)的语句,如果该条件成立,则会执行 if 后由大括号括起来的代码块,否则就忽略该代码块继续执行后续的代码(跟C不同,Go中的if不需要加括号)
单个判断:
if 判断条件 { 执行代码块 }
如果要增加一个条件不满足时的情况,可以增加else以及后面的代码块,if 和 else 后的两个代码块是相互独立的分支,只能执行其中一个
if 判断条件 { 执行代码块1 } else { 执行代码块2 }
如果需要三个或三个以上的分支判断的情况,则要在中间else后再加if的判断的方式,三个情况只能执行一个
if 判断条件1 { 执行代码块1 } else if 判断条件2 { 执行代码块2 } else { 执行代码块3 }
if-else可以嵌套,else的匹配跟C一样是匹配最近大括号{}对应的if
嵌套:
if 判断条件1 { if 判断条件2 { 执行代码块1 } } else {//匹配判断条件1的if 执行代码块2 }
在if执行判断前可以增加一个执行语句,用;号分隔执行语句和判断语句,会先执行执行语句后再执行判断语句
特殊写法:
if 执行语句;判断语句{ 执行代码块 }
在Go中有严格的格式控制,if跟对应左大括号{必须在同一行,右大括号}和else/else-if必须在同一行
格式控制:
if ten := 10; ten < 10 { //在同一行 fmt.Print("<10") } else { //在同一行 fmt.Print(">=10") }
for:(循环流程控制)
Go 只有一种循环结构:for 循环。
基本的 for 循环由三部分组成,它们用分号隔开:
- 初始化语句:在第一次迭代前执行
- 条件表达式:在每次迭代前求值
- 后置语句:在每次迭代的结尾执行
初始化语句通常为一句短变量声明,该变量声明仅在 for`语句的作用域中可见,一旦条件表达式的布尔值为 false,循环迭代就会终止
for 初始化语句;条件表达式;后置语句 { 循环语句块 }
同if一样,可以省略最外层的小括号(),而且初始化语句和后置语句可以省略。
在Go中没有while和do-while语句,而是通过没有分号的for来实现,在for中增加一个if判断以及break来充当原来while中的判断条件。
for {//while if 退出判断条件 { break } 循环语句 } for {//do-while 循环语句 if 退出判断条件 { break } }
break:跳出当前循环,无视for条件约束;
continue:跳过当次循环,仍然执行后置语句和判断条件表达式,如符合条件会继续执行for语句;
标签定义:
标签名:
OneLoop://这行就是标签 for { if 退出判断条件 { break } }
goto、break、continue都可以配合标签来完成对特定循环的跳转、跳出、跳过。
func main() { for x := 0; x < 10; x++ { for y := 0; y < 10; y++ { if y == 2 { // 跳转到标签 goto breakHere } } } // 手动返回, 避免执行进入标签 return breakHere:// 标签 fmt.Println("done") }
switch:(分支流程控制)
switch相当于用来处理大量重复的if-else语句的代替语句。
switch 表达式 { case 对表达式的判断:{ 语句 } }
判断i
var i = 8 switch i { case 8: { fmt.Println("=8") //fallthrough//输入后会继续运行下一个case } case -1,0://多个情况结果相同可以放在一起用,来分隔 { fmt.Println("none") } default: { fmt.Println("!=8") } }
①其中default是可选的但是一个switch只能有一个,是用于对所有case都不符合的情况进行的处理。
②多个情况结果相同可以放在一起用,来分隔。
③当switch未声明表达式默认为true。
跟C不同,Go的switch语句内置了break,各case之间独立,运行完即退出,如果需要继续按case运行则需要fallthrough关键字