Go只有传值,指针传的是地址副本;结构体需传指针才能修改原值;切片/map/channel是含指针的值类型;nil指针解引用会panic;关键在所传值是否指向原始数据。
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" } → 原 User 的 Name 被修改int),也建议方法接收者用指针——否则调用 u.Method() 会复制整个结构体[]int、map[string]int、chan 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 不受影响——你只是把那个指针副本重新指向了新地址传 *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小时内与您取得联系。