通八洲科技

如何判断Go何时应使用指针_Go Pointer使用场景总结

日期:2025-12-23 00:00 / 作者:P粉602998670
Go中是否用指针取决于四点:是否需修改原值、值大小、接口实现需求及并发共享需要;传值不改原值且小结构体更高效,大结构体、需修改、实现接口或并发时应传指针。

Go中是否用指针,核心看两点:要不要修改原值,以及值是否太大。不是所有结构体都要传指针,也不是所有基础类型都不能传指针——关键在语义和效率。

需要修改原始数据时必须用指针

函数内对参数的修改要反映到调用方,就必须传指针。基础类型(int、string、struct等)默认传值,改了也白改。

大结构体建议传指针避免拷贝开销

Go每次传参都复制一份值。如果结构体字段多、嵌套深、含大数组或大slice,拷贝成本明显。一般超过16–32字节就值得考虑指针。

方法集与接口实现常依赖指针接收者

一个类型T的方法集只包含“T接收者”的方法;*T的方法集则包含“T接收者”和“*T接收者”的全部方法。而接口变量要能存某个类型,该类型必须实现接口所有方法——这常迫使你用指针。

并发安全与共享状态天然倾向指针

多个goroutine要读写同一份数据,必须共享内存地址,也就是用指针(或通过channel传递指针)。值拷贝意味着各玩各的,起不到同步作用。

基本上就这些。不复杂但容易忽略:先想“我要不要改它”,再看“它大不大”,接着检查“接口能不能接住”,最后想想“有没有并发读写”。四步下来,指针用不用,心里就有数了。