Go 的变量、常量与零值

Go 中变量和常量的声明方式、短变量声明规则,以及零值在语言设计中的基础地位。

#type / concept #status / growing #tech / dev #resource / go

[!info] related notes

Go 的变量、常量与零值

一句话定义

Go 的变量、常量与零值共同定义了“数据默认长什么样、什么时候必须显式初始化、什么时候可以依赖语言默认值”这套基础心智。

核心机制 / 工作原理

Go 里常见的声明方式有:

  • var name type
  • var name = value
  • name := value
  • const name = value

其中最需要先理解的是零值:

  • 数值类型零值通常是 0
  • bool 零值是 false
  • string 零值是 ""
  • 指针、slicemapfuncinterface 等引用型运行时值的零值通常是 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 不是所有类型的零值,只有部分类型会是 nil
  • slice 的零值 nil 和空切片不完全一样
  • map 的零值 nil 可读但不可直接写
  • 短变量声明要求至少有一个新变量被引入
创建于 2026/6/20 更新于 2026/6/20