Go 的变量、常量与零值
Go 中变量和常量的声明方式、短变量声明规则,以及零值在语言设计中的基础地位。
#type / concept
#status / growing
#tech / dev
#resource / go
[!info] related notes
- 所属 MOC: Go 语言基础 MOC
- 前置概念: Go 基本类型
- 并列概念: Go 指针, Go Slice, Go Map
- 关系笔记: Go 中的值、指针与引用语义
Go 的变量、常量与零值
一句话定义
Go 的变量、常量与零值共同定义了“数据默认长什么样、什么时候必须显式初始化、什么时候可以依赖语言默认值”这套基础心智。
核心机制 / 工作原理
Go 里常见的声明方式有:
var name typevar name = valuename := valueconst name = value
其中最需要先理解的是零值:
- 数值类型零值通常是
0 bool零值是falsestring零值是""- 指针、
slice、map、func、interface等引用型运行时值的零值通常是nil
零值的重要性在于:
- 让很多变量在未手动初始化时也有可预测状态
- 降低“忘记初始化”导致的随机未定义行为
- 让 API 设计更容易利用“默认即可用”的思路
最小例子 / 最小场景
var count int
var name string
var enabled bool
fmt.Println(count) // 0
fmt.Println(name) // ""
fmt.Println(enabled) // false
再看短变量声明:
user := "alice"
score := 100
它常用于函数体内部,但不能直接用于包级作用域。
最值得先记住的规则
- 包级作用域只能用
var/const,不能用:= - 零值不是“未定义”,而是明确存在的默认状态
const更适合编译期常量,不是什么值都能做常量
边界与易混淆点
nil不是所有类型的零值,只有部分类型会是nilslice的零值nil和空切片不完全一样map的零值nil可读但不可直接写- 短变量声明要求至少有一个新变量被引入