Study Golang — (3) 流程控制

Go中流程控制分三大类:条件判断,循环控制和无条件跳转。

1、条件判断:if

Go的if还有一个强大的地方就是条件判断语句里面允许声明一个变量,这个变量的作用域只能在该条件逻辑块内,其他地方就不起作用了,如下所示:

多个条件的时候如下所示:

2、条件判断:switch

有些时候你需要写很多的if-else来实现一些逻辑处理,这个时候代码看上去就很丑很冗长,而且也不易于以后的维护,这个时候switch就能很好的解决这个问题。它的语法如下:

sExpr和expr1、expr2、expr3的类型必须一致。Go的switch非常灵活,表达式不必是常量或整数,执行的过程从上至下,直到找到匹配项;而如果switch没有表达式,它会匹配true。

在第5行中,我们把很多值聚合在了一个case里面,同时,Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch, 但是可以使用fallthrough强制执行后面的case代码。

上面的程序将输出

3、循环控制:for

Go里面最强大的一个控制逻辑就是for,它既可以用来循环读取数据,又可以当作while来控制逻辑,还能迭代操作。它的语法如下:

expression1、expression2和expression3都是表达式,其中expression1和expression3是变量声明或者函数调用返回值之类的,expression2是用来条件判断,expression1在循环开始之前调用,expression3在每轮循环结束之时调用。
一个例子比上面讲那么多更有用,那么我们看看下面的例子吧:

有些时候需要进行多个赋值操作,由于Go里面没有,操作符,那么可以使用平行赋值i, j = i+1, j-1
有些时候如果我们忽略expression1和expression3:
sum := 1
for ; sum < 1000; { sum += sum } 其中;也可以省略,那么就变成如下的代码了,是不是似曾相识?对,这就是while的功能。

在循环里面有两个关键操作break和continue ,break操作是跳出当前循环,continue是跳过本次循环。当嵌套过深的时候,break可以配合标签使用,即跳转至标签所指定的位置,详细参考如下例子:

break和continue还可以跟着标号,用来跳到多重循环中的外层循环
for配合range可以用于读取slice和map的数据:

由于 Go 支持 “多值返回”, 而对于“声明而未被调用”的变量, 编译器会报错, 在这种情况下, 可以使用_来丢弃不需要的返回值 例如

4、无条件跳转:goto

Go有goto语句——请明智地使用它。用goto跳转到必须在当前函数内定义的标签。例如假设这样一个循环:

注:标签名是大小写敏感的。

转自:https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/02.3.md

————————————————————

原创文章,转载请注明: 转载自孙希栋的博客

本文链接地址: 《Study Golang — (3) 流程控制》

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Scroll Up