Golang Go语言中工厂函数返回指针的原因除了提高传输效率外还有其他原因吗?

发布于 1周前 作者 gougou168 来自 Go语言

Golang Go语言中工厂函数返回指针的原因除了提高传输效率外还有其他原因吗?

12 回复

是不是有锁

更多关于Golang Go语言中工厂函数返回指针的原因除了提高传输效率外还有其他原因吗?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


指针可以调用所有方法

不是吧 非指针类型也可以调用所有方法啊. go 不是会自动处理吗?

是不是某些情况下返回的类型要给接口赋值的时候. 会遇到什么不支持普通类型的场景.

1.指针效率高
2.为了以后拓展,比如单例,或者提前初始化,或者修改功能开放给下游

大佬第二点能详细解释一下吗? 由例子吗?

这里指"提前初始化,或者修改功能开放给下游"

提前初始化 是指初始化交给调用方实现是吗?
修改功能开放给下游, 是指开放给调用者的调用者?

我理解了 谢谢.

然后, 我想了一下 指针和单例有关系吗?
<br>package singleton<br><br>import (<br> "sync"<br>)<br><br>type singleton struct {}<br><br>var instance *singleton<br>var once sync.Once<br><br>func NewInstance() singleton {<br> <a target="_blank" href="http://once.Do" rel="nofollow noopener">once.Do</a>(func() {<br> instance = singleton{}<br> })<br> return instance<br>}<br>
这样写也没毛病啊…

其实这里使用指针会降低性能,返回指针使得 Storage 逃逸到堆上,否则可以直接栈上分配内存

#7 比如存储使用 redis,调用链的方式,在运行时动态修改他的 db.

作为IT领域Go语言方面的专家,对于Golang中工厂函数返回指针的原因,除了提高传输效率外,确实还有其他几个重要原因:

  1. 方便内存管理:工厂函数返回指针可以避免手动分配和释放内存的麻烦。Go语言的垃圾回收机制会自动处理不再使用的内存,从而减轻了开发人员的负担。
  2. 避免不必要的复制:当直接创建结构体实例并返回时,如果结构体较大,会发生结构体复制操作,增加内存开销。而返回指针则只需传递内存地址,避免了这种不必要的复制。
  3. 实现动态数据结构:工厂函数可以根据实际需求动态地分配内存,并返回一个指向新分配的结构体的指针,从而灵活地创建动态数据结构。
  4. 支持函数参数的修改:在函数调用中,如果需要修改传入的结构体参数,通过指针可以实现。因为函数参数在Go中是按值传递的,直接传递结构体时函数接收的是副本,无法修改原始变量。而传递指针则可以让函数直接操作原始数据。

综上所述,Golang中工厂函数返回指针的原因多样,这些原因共同使得指针在Go语言中成为了一种强大且灵活的工具。

回到顶部