Go 指针

Go 指针用于保存值的地址并支持间接访问,但其设计目标是服务值语义,而不是鼓励复杂指针算术。

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

[!info] related notes

Go 指针

一句话定义

Go 指针是“指向某个值地址的值”,用于共享或修改原始数据,但 Go 有意限制了指针能力,不把它做成 C 那样的底层算术工具。

核心机制 / 工作原理

最常见的两种操作:

  • &x 取地址
  • *p 解引用

指针最常见的用途是:

  • 避免复制大对象
  • 在函数里修改调用方传入的数据
  • 作为方法接收者,让方法更新原对象状态

Go 为什么有指针但又克制:

  • 有指针,能表达共享与原地修改
  • 不支持指针算术,降低一类底层错误
  • 强调“明确知道自己为什么用指针”

最小例子 / 最小场景

func increment(n *int) {
    *n = *n + 1
}

func main() {
    value := 1
    increment(&value)
    fmt.Println(value) // 2
}

这个例子表达的是:

  • 函数默认拿到的是参数副本
  • 如果你希望修改原变量,需要显式传地址

最值得优先理解的点

  • 指针本身也是值
  • 指针存在不代表“所有传参都是引用传递”
  • Go 的很多 API 设计会用指针来表达“可能缺失”或“需要原地修改”

边界与易混淆点

  • 指针不是引用类型的同义词
  • nil 指针一旦解引用会 panic
  • 不是所有场景都应该优先用指针,过度指针化会让代码心智负担上升
创建于 2026/6/20 更新于 2026/6/20