变量的声明
标准格式
var 变量名 变量类型
批量格式
var (
a int
b string
c []float32
d func() bool
e struct {
x int
}
)
var a int
var b string
var c []float32
var d func() bool
var e struct{
x int
}
Go语言变量的初始化
默认值:
整型和浮点型变量的默认值为 0。
字符串变量的默认值为空字符串。
布尔型变量默认为 bool。
切片、函数、指针变量的默认为 nil。
变量初始化的标准格式
var 变量名 类型 = 表达式
var hp int = 100
上面代码中,100 和 int 同为 int 类型,int 可以认为是冗余信息,因此可以进一步简化初始化的写法。
编译器推导类型的格式
在标准格式的基础上,将 int 省略后,编译器会尝试根据等号右边的表达式推导 hp 变量的类型。
var hp = 100
var defence = 20
var damageRate float32 = 0.17
var damage = float32(attack-defence) * damageRate
fmt.Println(damage)
第 4 行,将 attack 和 defence 相减后的数值结果依然为整型,使用 float32() 将结果转换为 float32 类型,再与 float32 类型的 damageRate 相乘后,damage 类型也是 float32 类型。
提示:damage 变量的右值是一个复杂的表达式,整个过程既有 attack 和 defence 的运算还有强制类型转换。
短变量声明并初始化
var 的变量声明还有一种更为精简的写法,例如:
hp := 100
注意:由于使用了:=,而不是赋值的=,因此推导声明写法的左值变量必须是没有定义过的变量。若定义过,将会发生编译错误。
Go语言多个变量同时赋值
变量交换
var b int = 200
b, a = a, b
fmt.Println(a, b)```
### Go语言匿名变量
在使用多重赋值时,如果不需要在左值中接收变量,可以使用匿名变量
```func GetData() (int, int) {
return 100, 200
}
a, _ := GetData()
_, b := GetData()
fmt.Println(a, b)```
代码运行结果:
100 200
**注意:**匿名变量不占用命名空间,不会分配内存。匿名变量与匿名变量之间也不会因为多次声明而无法使用。