版本:1.18.3
Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。严格区分大小写。
Go语言规范变量名、常量名、函数名首字母大写可被其他包导入访问,首字母小写只能在本包内使用。
变量声明
1. Go 语言使用 var 关键字声明变量,变量的数据类型在变量名称后声明。
例:声明变量 i ,其数据类型是 int (int 默认值是 0),初始化变量值为 20。
var i int = 20
2. 可以不声明变量类型,根据变量值推导变量类型
var n = 10
Go 语言中整数数值型变量的默认类型是 int,此时赋值给其他类型会出错
// cannot use "300" (untyped string constant) as int value in assignment n = "300"
3. 同时声明多个变量
例:同时声明 int 类型变量 x,y,z
var x, y, z int
4. 声明多个不同数据类型变量,需要初始化赋值自动推导类型
var id, name, age = 1, "golang", 17
int变量 id = 1,字符串变量 name = "golang", int变量 age = 17
5. Go 语言也不使用 var 关键字,可以通过 := 声明初始化变量,但不能显示声明变量类型,由 Go 自动推导。
例子:声明变量 num,赋值 20
// 相当于 var num int = 20 num := 20
说明:
①. 只能在函数体内使用,即只能声明初始化局部变量。
②. 也可以同时声明初始化多个变量,类似于使用 var 关键字。
6. 使用 var 关键字声明全局变量
// 声明全局变量 var globalVar1 int = 10 var globalVar2 int = 20 var ( globalVar3 int = 30 globalVar4 int = 40 )
打印变量的数据类型
fmt.Printf("%T", num)
打印变量的内存地址
fmt.Printf("%p", &num)
打印变量的字节大小
fmt.Printf("%d", unsafe.Sizeof(num))
变量的作用域
Go 语言的变量作用域有:
局部变量:
1. 在函数体内声明的变量称之为局部变量,形参和返回值也都属于局部变量,其作用范围是在函数体内。
2. 局部变量的声明周期是从函数被调用执行到函数执行完毕被销毁。
3. 在同一个作用域内变量名称不能相同。
4. 在函数内局部变量可以全局变量重名,在该函数内只能访问局部变量。
全局变量:
1. 在函数体外声明的变量被称为全局变量。
2. 全局变量必须使用 var 关键字声明,不能通过 “:=” 初始化代替变量的声明。
Go 语言变量的 值类型 和 引用类型
值类型
对于基础数据类型的变量都是直接指向内存中的值,通过变量给其他变量赋值时,自动对变量值进行了拷贝,所以指向的值相同,但内存地址是不同的。
值类型的数据类型: 整数类型、浮点数类型、布尔值、字符串、数组和结构体。
值类型都有对应的指针类型,格式为 *数据类型。
引用类型
对于其他数据类型一般使用引用类型,变量指向的是值得引用地址,赋值时也是拷贝出一份新的引用地址,由于引用地址相同所以指向的值是同一个。