一、变量
1.声明
1.1 一般形式
var 变量名 变量类型
- var:声明变量的关键字
- 变量名:变量的名字,标识符
- 变量类型:变量存储的数据类型
1.2 物理实现
定义变量后,就在内存中开辟了一个空间,至于空间占用多大,由变量类型决定。空间的别名叫“变量名”
1.3 编译器自动推断
- 类型推导(保留
var,省略类型):var 变量名 = 初始化值,任何地方都能用(包级、函数内),比如var x = 10; - 短变量声明(省略
var和类型,用:=):变量名 := 初始化值,只能在函数内用,比如y := "abc"。
2.赋值
- 一般格式 var 变量名 变量类型 = 值
- 简洁格式 例如 a := "喵"(有限制,只能在函数内部使用) 批量定义
3.上手操作
4.使用类型
4.1 值类型
值类型变量通常存储在栈中,尤其是当它们是局部变量时。当值类型变量的值需要在函数作用域之外使用时,Go 会将其分配到堆内存中。初始内存:[[juejin.cn/post/756954…]]
4.2 引用类型
一个引用类型的变量 r1 存储的是 r1 的值所在的内存地址(数字),或内存地址中第一个字所在的位置。这种变量又称之为指针。
二、常量
是初始化变量后一个不可改变的值,关键字const
作用:
- 避免“魔法值”,增强可读性
- 执行编译期优化
限制:只能定义底层类型为布尔型、数字型(整数型、浮点型和复数)和字符串型。
iota
特殊常量,可以认为是一个可以被编译器修改的常量
下图实例来自:菜鸟编程
三、作用域
变量生效的区域
范围划分:
- 代码块:如果变量定义在此,只在{ }包裹的内部有效
- 局部:函数内部声明的变量
- 全局:函数外部声明的变量,在当前包;首字母大写,所有包有效