V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
chaleaoch
V2EX  ›  Go 编程语言

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

  •  
  •   chaleaoch · 2021-09-14 18:10:24 +08:00 · 1421 次点击
    这是一个创建于 1168 天前的主题,其中的信息可能已经有所发展或是发生改变。

    11 条回复    2021-09-15 16:32:07 +08:00
    CEBBCAT
        1
    CEBBCAT  
       2021-09-14 19:25:26 +08:00
    是不是有锁
    cyrivlclth
        2
    cyrivlclth  
       2021-09-14 19:43:55 +08:00
    指针可以调用所有方法
    chaleaoch
        3
    chaleaoch  
    OP
       2021-09-14 21:23:50 +08:00
    @cyrivlclth 不是吧 非指针类型也可以调用所有方法啊. go 不是会自动处理吗?

    是不是某些情况下返回的类型要给接口赋值的时候. 会遇到什么不支持普通类型的场景.
    THESDZ
        4
    THESDZ  
       2021-09-15 08:38:18 +08:00   ❤️ 1
    1.指针效率高
    2.为了以后拓展,比如单例,或者提前初始化,或者修改功能开放给下游
    chaleaoch
        5
    chaleaoch  
    OP
       2021-09-15 09:21:07 +08:00
    @THESDZ 大佬第二点能详细解释一下吗? 由例子吗?
    chaleaoch
        6
    chaleaoch  
    OP
       2021-09-15 09:21:29 +08:00
    @THESDZ 这里指"提前初始化,或者修改功能开放给下游"
    chaleaoch
        7
    chaleaoch  
    OP
       2021-09-15 09:22:17 +08:00
    @THESDZ 提前初始化 是指初始化交给调用方实现是吗?
    修改功能开放给下游, 是指开放给调用者的调用者?
    chaleaoch
        8
    chaleaoch  
    OP
       2021-09-15 09:22:37 +08:00
    我理解了 谢谢.
    chaleaoch
        9
    chaleaoch  
    OP
       2021-09-15 09:44:46 +08:00
    @THESDZ 然后, 我想了一下 指针和单例有关系吗?
    ```
    package singleton

    import (
    "sync"
    )

    type singleton struct {}

    var instance *singleton
    var once sync.Once

    func NewInstance() singleton {
    once.Do(func() {
    instance = singleton{}
    })
    return instance
    }
    ```
    这样写也没毛病啊...
    SorcererXW
        10
    SorcererXW  
       2021-09-15 14:55:05 +08:00
    其实这里使用指针会降低性能,返回指针使得 Storage 逃逸到堆上,否则可以直接栈上分配内存
    THESDZ
        11
    THESDZ  
       2021-09-15 16:32:07 +08:00
    @chaleaoch #7 比如存储使用 redis,调用链的方式,在运行时动态修改他的 db.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2481 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 15:54 · PVG 23:54 · LAX 07:54 · JFK 10:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.