目录
什么是变量
使用一个名称来绑定一块内存地址,该内存地址中存放的数据类型由定义变量时指定的类型决定,该内存地址里面存放的内容可以改变。
变量命名规范
- 由大小写字母、数字和下划线组成(Unicode字符也可以作为变量名,但不推荐这样使用)
- 变量名必须以字母开头
- 推荐使用驼峰的命名规范,命名变量名
变量声明
显式的完整声明
声明语法
var <variableName> <type> [= <value>]
在上面的声明语法中,var关键字用于变量声明。variableName是自定义的变量名称标识符,而type是变量对应的数据类型。可选的value是变量的初始值,初始值可以是字面量,也可以是其它变量名,还可以是一个表达式。如果不指定初始值,Go默认将该变量初始化为类型的零值。
示例
下面的例子中,声明一个整型变量number,且number变量的初始值为23。
var number int = 23
短类型声明
声明语法
<variableName> := <value>
短类型声明只能用在函数和方法内,Go编译器会根据 ":="右边的值进行类型推断。
示例
例如在函数中声明一个变量。
func demo() {
a := 1
// do something...
}
变量值
变量实际指向的是地址里存放的值,变量的值具体怎么解析是由变量的类型来决定的。在初始化变量值时,我们可以使用字面量,也可以使用其它的变量名。
存储
Go编译器使用逃逸技术能够自动为变量分配空间。存储空间可能在栈上,也可能在堆上。
生命周期
Go提供自动内存管理,通常Go的使用者无需关注变量的生命周期。
类型
Go是强类型静态语言,每个变量都对应一个类型。类型决定了变量存储的值的解析方式、支持的操作和运算集。
作用域
Go内部使用统一的命名空间对变量进行管理,每个变量都有一个唯一的名字,包名是这个名字的前缀。
多变量赋值
Go允许多变量赋值。多变量赋值操作可以是不同类型的变量:
var variable1, variable2 = 3, "hi"
variable4, variable5 := '3', []string{"6"}
在进行多变量赋值操作的过程中,首先计算出所有右值,然后再依次完成赋值操作:
x, y := 1, 2
x, y = y+3, x+2 // 先计算出右值y+3, x+2,然后再对x、y变量赋值
// 5, 3
未使用错误
编译器将未使用的局部变量当作错误:
package main
func main() {
variable1 := 3 // build error: variable1 declared but not used
}