3.3.2 变量的声明

变量表示内存中的一个存储区域,该区域有自己的名称(变量名)和类型(数据类型)。编译器可以根据初始化值推断类型,这是一种语法糖。比如数值1的默认类型是int,数值2.0的默认类型是float(但并不能推断它是float32还是float64)。

在声明变量时,必须有确切的类型。完成声明后,变量会引用一个或多个内存来存储和修改数据。类型决定了分配的内存长度和数据存储的格式。Go语言是强类型语言,它不能把一个变量从一种类型隐式地转换为另一种类型。此外,还需要用一个名称来指代分配给变量的内存(注意,这里指代的不是这块内存的地址),这个名称就是变量的名字。

注意:写代码时,我们并不知道变量的地址,变量的内存是在运行时分配的。例如,在赋值语句i := 1中,由变量i来指代这块分配给变量的内存,而不是由i来指代1的地址。地址和内存是两个不同的概念。编译器会把i解析为一个地址,但在开发过程中i实际上指代的是这块内存。

在Go语言中,变量会被显式地声明,编译时编译器会检查函数所调用的类型是否正确。定义变量的语法有以下三种。

(1)指定变量类型,定义后若不赋值则使用零值,如var a string = "sure"。当然,也可以一次性声明多个变量,如var b, c int。

(2)根据值进行类型推导,判定变量的类型,如var num = 3.14。

(3)省略关键字var,使用短变量声明方式“:=”,如name:="sure"。需要注意的是,“:=”左侧的变量必须是一个新的变量,否则会导致编译报错。