Go中无官方“引用类型”,slice/map/chan等属“引用语义类型”,赋值复制结构头;传值适用于小、不可变、无需修改的类型(如基础类型、小结构体、time.Time);传指针用于共享可变状态或避免大对象拷贝。

Go 语言中没有“引用类型”这个官方概念(官方只分 值类型 和 指针类型),但日常开发中常把 slice、map、chan、func、interface 等称为“引用语义类型”——它们底层持有指针,赋值或传参时复制的是结构头(如 len/cap/ptr),而非底层数据。是否用指针,核心看两点:是否需要修改原值 和 是否过大影响性能。
适合传值的场景:小、不可变、无需跨函数修改。
传指针不是为了“省空间”,而是为了 共享可变状态 或 避免大对象拷贝。
它们本身是值类型(header 结构体),但行为像引用——因为 header 里存着指向底层数组/哈希表的指针。
立即学习“go语言免费学习笔记(深入)”;
interface{} 是两个字长的结构体(type ptr + data ptr),传 interface{} 是传值,但底层 data 可能是指针。
基本上就这些。不复杂但容易忽略——关键不是记规则,而是理解每个类型在内存里长什么样、谁在共享哪块数据。
以上就是Golang如何合理选择值类型与引用类型_Golang代码结构设计原则的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号