Parts of Effective Go
控制结构
if
1 | // simple if |
重新声明与再次赋值
1 | // err 被声明 |
上述处理方法是合法的
尽管在两次初始化声明中都存在了err
变量
满足以下三个条件,已被声明的变量x
可以再次出现在:=
声明中
- 本次声明与已声明的
x
处于同一作用域(若x
已在外层作用域中声明过,则本次声明会创建一个新的变量) - 在初始化时,与其类型相同的值才能赋予
x
- 在本次声明中至少另有一个变量是新声明的
函数的形参和返回值在词法上处于大括号以外,但它们的作用域与该函数体仍然相同。
for
1 | // Go的for循环有三种形式 |
1 | // 若想遍历 |
Go has no comma operator and ++ and -- are statements not expressions
Go
中没有逗号操作符,而++
和--
是语句而非表达式
1 | // 若想在for中使用多个变量 |
switch
1 | // case语句会自上而下逐一求值直到匹配为止 |
1 | // Compare 按字典顺序比较两个字节切片并返回一个整数。 |
类型选择
1 | package main |
函数
多值返回
1 | // 从字节数组中的特定位置获取其值,并返回该数值和下一个位置 |
可命名结果形参
1 | func nextInt(b []byte, pos int) (value, nextPos int) { return } |
defer
defer
语句用于预设一个函数调用,该函数会在执行defer
的函数返回之前
立即执行。
被推迟函数的实参在推迟执行时
就会求值(defer
时),而不是在调用执行时
才求值。
被推迟的函数按照后进先出(LIFO
)的顺序执行。
1 | // Contents 将文件的内容作为字符串返回。 |
1 | package main |