对习惯JavaScript、Python或Java自动内存管理的开发者来说,Go语言里的指针往往是第一道心理门槛。很多人以为指针意味着手动分配和释放内存,但实际上,Go的指针更像一个“地址变量”,只负责指向另一块数据所在的位置。
简单来说,程序里的每个变量都会占用一段内存,而这段内存有一个地址。指针变量保存的不是具体数值,而是这个地址。比如在Go中,可以用 &x 获取变量x的地址,再用 *p 读取或修改该地址上的值。掌握这两个符号,加上声明时的 * 类型标记,就能覆盖大多数指针使用场景。
为什么需要指针?核心原因是避免不必要的复制,并让多个函数或结构体操作同一份数据。举例来说,一个修改用户名的函数如果接收普通结构体,只能改到副本;如果接收 *User 指针,就能直接修改原对象。文章中的示例显示,调用 changeName(&user) 后,原本的 user.Name 从“Lucas”变成了“João”。
在实际开发中,这种共享实例的优势更明显。一个API可以只创建一个数据库连接 db,然后把它传给用户仓库和订单仓库。两个仓库内部保存的是 *sql.DB 指针,而不是各自复制一份连接。这样既节省资源,又能保证所有模块访问同一个底层连接。
文章最后给出的规则也很实用:默认情况下使用值传递;只有在需要共享或修改同一实例、表示 nil,或者要避免复制大对象时,才使用指针。对刚接触Go的开发者来说,把指针理解为“同一实例的引用工具”,比把它想象成底层内存操作要轻松得多。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.