流程控制
Go中流程控制分三大类:条件判断,循环控制和无条件跳转。
if
if也许是各种编程语言中最常见的了,它的语法概括起来就是:如果满足条件就做某事,否则做另一件事。
Go里面if条件判断语句中不需要括号,如下代码所示
1 | if x > 60 { |
Go的if条件判断语句里面允许声明变量,这个变量的作用域只能在该条件逻辑块内
如下所示:
1 | // 计算获取值x,然后根据x返回的大小,判断是否大于10。 |
多个条件的时候如下所示:
1 | if integer == 3 { |
goto
用goto跳转到必须在当前函数内定义的标签。例如假设这样一个循环:
1 | func myFunc() { |
标签名是大小写敏感的。
for
Go里面最强大的一个控制逻辑就是for,它即可以用来循环读取数据,又可以当作while来控制逻辑,还能迭代操作。
语法如下:
1 | for expression1; expression2; expression3 { |
expression1、expression2和expression3都是表达式, 其中expression1和expression3是变量声明或者函数调用返回值之类的, expression2是用来条件判断,expression1在循环开始之前调用,expression3在每轮循环结束之时调用。
示例:
1 | package main |
在循环里面有两个关键操作break和continue ,break操作是跳出当前循环,continue是跳过本次循环。 当嵌套过深的时候,break可以配合标签使用,即跳转至标签所指定的位置
1 | for index := 10; index > 0; index-- { |
break和continue还可以跟着标签,用来跳到多重循环中的外层循环
for配合range可以用于读取slice和map的数据:
1 | for k,v := range mapValue { |
由于 Go 支持 “多值返回”, 而对于“声明而未被调用”的变量, 编译器会报错, 在这种情况下, 可以使用_来丢弃不需要的返回值 例如
1 | for _, v := range mapValue { |
switch
有时候需要写很多的if-else来实现一些逻辑处理,这时代码看上去就很丑很冗长,而且也不易于以后的维护, 这时switch就能很好的解决这个问题
1 | switch sExpr { |
sExpr和expr1、expr2、expr3的类型必须一致。 Go的switch非常灵活,表达式不必是常量或整数,执行的过程从上至下,直到找到匹配项; 而如果switch没有表达式,它会匹配true。
1 | i := 10 |
Go里面switch默认每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch。 但是可以使用fallthrough强制执行后面的case代码。
1 | integer := 6 |
