全网整合营销服务商

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

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

如何使用Golang实现指针与值类型区别_Golang传值与传引用示例

Go只有传值,指针传的是地址副本;结构体需传指针才能修改原值;切片/map/channel是含指针的值类型;nil指针解引用会panic;关键在所传值是否指向原始数据。

Go 里没有“传引用”,只有“传值”——但指针变量的值是地址

Go 语言中所有参数传递都是值传递,func f(x int)func f(p *int) 的区别不在于“传引用”或“传值”,而在于你传进去的“值”本身是什么:一个是整数副本,一个是内存地址副本。误以为 Go 支持引用传递,是初学者踩坑最频繁的认知偏差。

修改结构体字段时,为什么传指针才生效?

因为结构体默认按值传递,函数内操作的是副本;传 *struct 后,你拿到的是原结构体地址,解引用 (*s).Field 或简写 s.Field 就能改原始内存。

  • func updateName(u User) { u.Name = "Alice" } → 原 User 不变
  • func updateName(u *User) { u.Name = "Alice" } → 原 UserName 被修改
  • 即使结构体很小(如两个 int),也建议方法接收者用指针——否则调用 u.Method() 会复制整个结构体

切片、map、channel 是“引用类型”?不,它们是含指针的描述符

[]intmap[string]intchan int 本身是值类型,但它们底层结构包含指向底层数组/哈希表/队列的指针。所以:

  • func appendInt(s []int, v int) []int { return append(s, v) } → 必须返回新切片,且调用方要赋值:s = appendInt(s, 5)
  • func setMap(m map[string]int, k string, v int) { m[k] = v } → 不需要返回,因为 m 值里存着指向同一哈希表的指针
  • 但若在函数内做 m = make(map[string]int),外部原 map 不受影响——你只是把那个指针副本重新指向了新地址

常见误用:对 nil 指针解引用 panic

*T 并不保证它非 nil;没初始化的指针变量值是 nil,直接解引用会触发 panic: runtime error: invalid memory address or nil pointer dereference

func printName(u *User) {
    // ❌ 危险!未检查 u 是否为 nil
    fmt.Println(u.Name)

    // ✅ 应先判断
    if u == nil {
        fmt.Println("user is nil")
        return
    }
    fmt.Println(u.Name)
}

接口值(interface{})和指针一样,也可能为 nil;但空接口变量本身非 nil,不代表它装的动态值非 nil —— 这点容易混淆,需格外注意。

真正关键的不是“传值还是传引用”,而是“你传的那个值,是否指向可修改的原始数据”。盯住变量的类型本质(int vs *int vs []int),比记口诀管用得多。


# go  # golang  # app  # 区别  # 为什么  # String  # Error  # 结构体  # int  # 指针  # 接口  # 值类型  # 引用类型  # Struct  # Interface  # 值传递  # 引用传递  # pointer  # 切片  # nil  # append  # map  # channel  # 的是  # 都是  # 原始数据  # 就能  # 不需要  # 而在  # 不代表  # 也可  # 得多  # 不受 


相关文章: 建站之星ASP如何实现CMS高效搭建与安全管理?  广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?  如何在IIS中新建站点并解决端口绑定冲突?  建站主机是什么?如何选择适合的建站主机?  高性价比服务器租赁——企业级配置与24小时运维服务  h5在线制作网站电脑版下载,h5网页制作软件?  淘宝制作网站有哪些,淘宝网官网主页?  济南网站制作的价格,历城一职专官方网站?  建站之星好吗?新手能否轻松上手建站?  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  教程网站设计制作软件,怎么创建自己的一个网站?  如何在宝塔面板中创建新站点?  如何在Tomcat中配置并部署网站项目?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  建站之星2.7模板快速切换与批量管理功能操作指南  建站之星如何优化SEO以实现高效排名?  建站之星后台密码遗忘?如何快速找回?  如何快速查询网址的建站时间与历史轨迹?  如何选择CMS系统实现快速建站与SEO优化?  建站主机数据库如何配置才能提升网站性能?  建站之星安全性能如何?防护体系能否抵御黑客入侵?  常州自助建站费用包含哪些项目?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  如何通过IIS搭建网站并配置访问权限?  javascript基本数据类型及类型检测常用方法小结  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  如何选择高效稳定的ISP建站解决方案?  c# Task.ConfigureAwait(true) 在什么场景下是必须的  建站之星伪静态规则如何正确配置?  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  如何选择高性价比服务器搭建个人网站?  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  如何通过.red域名打造高辨识度品牌网站?  如何在腾讯云服务器快速搭建个人网站?  Bpmn 2.0的XML文件怎么画流程图  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  如何在橙子建站中快速调整背景颜色?  智能起名网站制作软件有哪些,制作logo的软件?  建站之星代理如何优化在线客服效率?  做企业网站制作流程,企业网站制作基本流程有哪些?  微信小程序 input输入框控件详解及实例(多种示例)  建站之星如何保障用户数据免受黑客入侵?  宁波自助建站系统如何快速打造专业企业网站?  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  行程制作网站有哪些,第三方机票电子行程单怎么开?  大连网站制作公司哪家好一点,大连买房网站哪个好?  C++时间戳转换成日期时间的步骤和示例代码  如何在Golang中使用replace替换模块_指定本地或远程路径 

您的项目需求

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