全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Golang如何处理指针与值的关系_Golang内存基础说明

Go函数参数永远是值传递:值类型传副本,指针传地址值;切片/map/channel是含指针的结构体,表现类似引用;大对象或需修改原变量时用指针。

Go 语言中,函数参数传递永远是值传递,但“值”的内容取决于你传的是变量本身(值类型)还是它的地址(指针)。理解这一点,就抓住了 Go 指针与值关系的核心。

值类型传参:复制一份数据

int、float64、string、struct、array 等属于值类型。传入函数时,Go 复制整个值的副本,函数内修改不影响原变量。

例如:

func modify(x int) {
    x = 100 // 只改了副本
}
n := 42
modify(n)
fmt.Println(n) // 还是 42

这种机制安全、直观,但对大 struct 或数组来说,复制开销明显。

指针传参:传递地址,可间接修改原值

* 声明指针变量,用 & 取地址。传指针,等于把变量的内存地址“值”传进去——函数拿到地址后,就能通过 * 解引用去读写原位置的数据。

例如:

func modifyPtr(x *int) {
    *x = 100 // 修改地址指向的值
}
n := 42
modifyPtr(&n)
fmt.Println(n) // 输出 100

注意:&n 是一个 *int 类型的值(即地址),它本身仍是被复制传递的——只是这个“值”恰好能定位到原变量。

切片、map、channel 是引用类型?其实是“带指针的结构体”

它们不是真正的引用类型(Go 没有引用类型),而是由多个字段组成的结构体,其中包含指向底层数据的指针。所以传参时虽是值传递,但结构体里的指针字段被复制了,新旧变量仍指向同一块底层数组或哈希表。

  • 切片:含 ptr(指向底层数组)、len、cap —— 修改元素会反映到原切片;但 append 若扩容,可能生成新底层数组,原切片不受影响
  • map 和 channel:内部含指针,所以函数内增删元素会影响原 map/channel

因此它们“表现得像引用”,但本质仍是值传递 + 内部指针共享。

什么时候该用指针?记住两个关键场景

  • 需要函数修改调用方的变量值(如初始化结构体字段、解析结果写回)
  • 避免大对象(比如 > 128 字节的 struct)频繁复制,提升性能和内存效率
  • 实现接口时,方法集与接收者类型有关:只有 *T 方法集能同时被 T*T 调用;而 T 方法集只能被 T 调用(除非 T 是可寻址的)

小结构体(如 type Point struct{ X, Y int })通常直接传值更清晰;含大量字段或需统一修改语义时,优先用指针接收者。

基本上就这些。Go 不搞隐式引用,所有指针行为都显式可见——& 取地址,* 解引用,传什么、改什么,一目了然。


# go  # golang  # app  # 字节  # String  # Array  # 结构体  # int  # 指针  # 接口  # 值类型  # 引用类型  # Struct  # 值传递  # 切片  # len  # cap  # append  # map  # channel  # 对象  # 仍是  # 的是  # 是一个  # 就能  # 多个  # 什么时候  # 是由  # 不受  # 但对  # 虽是 


相关文章: 如何通过西部建站助手安装IIS服务器?  如何选择高效稳定的ISP建站解决方案?  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  零基础网站服务器架设实战:轻量应用与域名解析配置指南  C#如何序列化对象为XML XmlSerializer用法  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  如何构建满足综合性能需求的优质建站方案?  建站之星后台管理系统如何操作?  如何选购建站域名与空间?自助平台全解析  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  c# Task.ConfigureAwait(true) 在什么场景下是必须的  香港服务器网站卡顿?如何解决网络延迟与负载问题?  西安大型网站制作公司,西安招聘网站最好的是哪个?  简历在线制作网站免费版,如何创建个人简历?  家庭建站与云服务器建站,如何选择更优?  青浦网站制作公司有哪些,苹果官网发货地是哪里?  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  制作门户网站的参考文献在哪,小说网站怎么建立?  建站之星后台管理:高效配置与模板优化提升用户体验  公司网站制作需要多少钱,找人做公司网站需要多少钱?  深圳网站制作平台,深圳市做网站好的公司有哪些?  如何在万网自助建站中设置域名及备案?  建站主机功能解析:服务器选择与快速搭建指南  广州商城建站系统开发成本与周期如何控制?  建站之星logo尺寸如何设置最合适?  php json中文编码为null的解决办法  建站之星北京办公室:智能建站系统与小程序生成方案解析  如何选择美橙互联多站合一建站方案?  制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何正确下载安装西数主机建站助手?  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  网站制作公司排行榜,抖音怎样做个人官方网站  建站之星官网登录失败?如何快速解决?  如何在阿里云完成域名注册与建站?  如何用腾讯建站主机快速创建免费网站?  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  如何快速配置高效服务器建站软件?  网站app免费制作软件,能免费看各大网站视频的手机app?  网站制作企业,网站的banner和导航栏是指什么?  公司网站的制作公司,企业网站制作基本流程有哪些?  Android自定义控件实现温度旋转按钮效果  重庆网站制作公司哪家好,重庆中考招生办官方网站?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  建站与域名管理如何高效结合?  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  如何选择网络建站服务器?高效建站必看指南  建站之星如何通过成品分离优化网站效率? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。