|
@@ -433,4 +433,114 @@ Go语言有两种变量声明形式。一种称为标准形式,另一种称为
|
|
|
```
|
|
|
|
|
|
### 每个局部声明的变量至少要被有效使用一次
|
|
|
+
|
|
|
+局部变量被声明后至少要被有效使用一次,否则编译器将报错。包级变量无此限制。
|
|
|
+
|
|
|
+可以参考下图
|
|
|
+
|
|
|
+`_, _ = r, s // 将r和s做为源值使用一次。`
|
|
|
+
|
|
|
+### 值的可寻址性
|
|
|
+
|
|
|
+所有变量都是可以寻址的,所有常量都是不可被寻址的。
|
|
|
+
|
|
|
+## 变量和常量的作用域
|
|
|
+
|
|
|
+```golang
|
|
|
+1| package main
|
|
|
+2|
|
|
|
+3| const y = 70
|
|
|
+4| var x int = 123 // 包级变量
|
|
|
+5|
|
|
|
+6| func main() {
|
|
|
+7| // 此x变量遮挡了包级变量x。
|
|
|
+8| var x = true
|
|
|
+9|
|
|
|
+10| // 一个内嵌代码块。
|
|
|
+11| {
|
|
|
+12| x, y := x, y-10 // 这里,左边的x和y均为新声明
|
|
|
+13| // 的变量。右边的x为外层声明的
|
|
|
+14| // bool变量。右边的y为包级变量。
|
|
|
+15|
|
|
|
+16| // 在此内层代码块中,从此开始,
|
|
|
+17| // 刚声明的x和y将遮挡外层声明x和y。
|
|
|
+18|
|
|
|
+19| x, z := !x, y/10 // z是一个新声明的变量。
|
|
|
+20| // x和y是上一句中声明的变量。
|
|
|
+21| println(x, y, z) // false 60 6
|
|
|
+22| }
|
|
|
+23| println(x) // true
|
|
|
+24| println(y) // 70 (包级变量y从未修改)
|
|
|
+25| /*
|
|
|
+26| println(z) // error: z未定义。
|
|
|
+27| // z的作用域仅限于上面的最内层代码块。
|
|
|
+28| */
|
|
|
+29| }
|
|
|
+```
|
|
|
+
|
|
|
+# 运算符
|
|
|
+
|
|
|
+## op=运算符
|
|
|
+
|
|
|
+对于一个二元算数运算符op,语句x = x op y可以被简写为x op= y。 在这个 简写的语句中,x只会被估值一次。
|
|
|
+
|
|
|
+就是 += 的描述
|
|
|
+
|
|
|
+## 字符串衔接运算符
|
|
|
+
|
|
|
+被+的两个操作数,必须为同一类型的字符串值
|
|
|
+
|
|
|
++=运算符也适用
|
|
|
+
|
|
|
+# 函数的声明和调用
|
|
|
+
|
|
|
+### 函数声明
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|