Day 1:
Go语言的循环结构只有for,而不像其他语言还有while,for循环的结构包括
- 初始化语句:每次for循环开始之前执行,初始化语句往往是:=语句,并且其可见范围只在for循环内部
- 条件表达式:每次迭代之前进行验证
- post语句:每次迭代之后执行
三个结构之间用分号隔开,和C、Java、Javascript不同,这三个结构没有用括号包裹起来,而每次循环执行的代码则必须用花括号包裹
for init statement; condition expression; post statement {
...
...
}
初始化语句以及post语句可以省略
如果把分号也省略了,就和其他语言中的while语法类似了
如果把条件表达式也省略了,就成了无限循环
例如Python中的:
while True:
...
...
if语句和for循环的结构类似,执行的代码必须用花括号包裹
与for循环类似,if语句也有初始化语句,且与判断语句间用分号分隔,可见范围也仅限if语句内
但习惯了Python,我不太习惯这种写法
通过if语句的初始化语句生命的变量在后面的所有else内都可见
一个练习:通过for循环,实现牛顿法求平方根的算法
switch语句是用来实现用更短的代码实现if-else语句,执行第一个与条件表达式相等的case内的代码
C、C++、Jaca、JavaScript、PHP都有switch语句,但不同的是,Go只执行被选中的case,其他case不会被执行,也就是说不可能多次触发case。事实上你可以想象Go在每个case内的代码最后自动加了“break”,并且和C语言不同,switch中的case后面不需要必须是常量,switch后面不需要必须是整形
case的验证顺序是从上到下
没有条件表达式的switch默认条件始终为true,所以就可以用来实现Python中的
if ...:
...
elif ...:
...
elif ...:
...
else ...:
...
defer语句将其后的函数执行推迟到了所在函数返回之前
defer语句会将函数调用压入栈中,所以执行顺序为先入后出