Golang中的指针与引用_Golang指针的定义与使用场景-Golang

Go中无引用类型,只有指针;&操作符返回指针,用于解引用;“传引用”实为误称,修改原变量需显式传 T并解引用赋值。

Go 里没有引用类型,只有指针

Go 语言中不存在 C++ 那种语法层面的「引用(reference)」,& 操作符永远返回一个指针,* 永远用于解引用。所谓「传引用」只是开发者对「传指针」行为的误称。函数参数若想修改原始变量,必须显式传入 *T 类型,并在函数内用 *p = ... 赋值。

常见错误现象:func modify(x int) { x = 42 } 不会改变调用方的变量;而 func modify(x *int) { *x = 42 } 才会。

  • 结构体较大时,传 *S 比传 S 更节省内存和复制开销
  • 方法接收者用指针(func (s *S) Method())才能修改字段;值接收者(func (s S) Method())只能读或改副本
  • 切片、map、channel 本身是引用类型(底层含指针),但它们的变量仍是值——所以 append 后需重新赋值,否则调用方看不到新元素

new() 和 & 的区别:何时该用哪个

new(T) 返回 *T,且将内存置零;&t 取已有变量 t 的地址。二者语义不同,不能混用。

使用场景:

  • 需要一个零值指针且无现成变量时,用 new(T) —— 如 ptr := new(int) 等价于 var tmp int; ptr := &tmp
  • 已有变量要传给函数或赋给结构体字段,直接用 &v —— 更直观、更常见
  • new([]int) 返回 *[]int(指向 nil 切片的指针),不是你想要的可 append 的切片;此时应写 &[]int{}[0] 或更稳妥地用 make + &

nil 指针解引用 panic 的典型场景

Go 运行时会在解引用 nil 指针时 panic,错误信息为 panic: runtime error: invalid memory address or nil pointer dereference。这不是编译错误,容易漏测。

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » Golang中的指针与引用_Golang指针的定义与使用场景-Golang
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4028713+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4028713+
  • 本周更新: 0+
  • 最后更新: 2026-03-16