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 |