Parts of A Tour Of Go
for
Go
只有一种循环结构: for
循环
基本的for
循环由三部分组成,用分号;
隔开
- 初始化语句: 在第一次迭代前执行
- 条件表达式: 在每次迭代前求值
- 后置语句: 在每次迭代的结尾执行
1 | package main |
初始化语句通常为一句短变量声明,该变量声明仅在for
语句的作用域中可见。
和C
、Java
、JavaScript
之类的语言不同之处在于Go
的for
语句后面没有小括号。
for
的初始化语句和后置语句是可选的
1 | package main |
for
是Go
中的while
去掉for
中的分号;
,实现while
1 | package main |
for
实现无限循环
如果省略循环条件,该循环就不会结束。
1 | package main |
if
Go
的if
语句与for
循环类型,表达式无需使用小括号()
,而大括号{}
则是必须的。
1 | package main |
if
的简短语句
同for
一样,if
可以在条件表达式之前执行一个简短语句。
该语句声明的变量作用域仅在if
内。
1 | package main |
if
和else
在if
的简短语句中声明的变量同样可以在对应的else
中使用。
1 | package main |
练习: 循环和函数
用牛顿法实现平方根函数。
1 | package main |
switch
1 | package main |
switch
的case
语句从上到下顺序执行,直到匹配成功时停止。
1 | // 当i等于0的时候,f不会被调用 |
1 | package main |
没有条件的switch
语句能使一长串的if-else
语句写得更加清晰。
1 | package main |
1 | package main |
defer
defer
语句可以将函数推迟到外层函数返回时执行。
推迟调用的函数其参数会立即求值,但直到外层函数返回前该函数都不会被调用。
1 | package main |
推迟调用的函数会被压入到一个栈中(defer
栈),当外层函数返回时,被推迟调用的函数会按照后进先出(LIFO)的顺序调用。
1 | package main |