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

go 单例模式

  •  
  •   yujianwjj · 2020-06-03 23:15:46 +08:00 · 2808 次点击
    这是一个创建于 1420 天前的主题,其中的信息可能已经有所发展或是发生改变。
    type A struct {
        data int
    }
    
    var a = A{3}
    
    func Create() *A {
        return &a
    }
    

    这个是单例模式吗?

    9 条回复    2020-06-08 10:53:07 +08:00
    luoqeng
        1
    luoqeng  
       2020-06-03 23:55:43 +08:00
    package 级别的变量就是单例
    neoblackcap
        2
    neoblackcap  
       2020-06-04 00:09:10 +08:00
    是,没记错你还可以用 init 函数对你的对象进行初始化
    janxin
        3
    janxin  
       2020-06-04 08:30:36 +08:00
    你甚至可以使用 sync.Once
    coldmonkeybit
        4
    coldmonkeybit  
       2020-06-04 09:27:34 +08:00
    请教一下,为什么这个算单例,我在其他地方不一样可以 new 这个 A 么..
    ziyeziye
        5
    ziyeziye  
       2020-06-04 10:07:43 +08:00
    @coldmonkeybit 一个是新变量,一个是返回已有变量的指针
    PiersSoCool
        6
    PiersSoCool  
       2020-06-04 11:23:55 +08:00
    package 级别的变量就是单例
    asAnotherJack
        7
    asAnotherJack  
       2020-06-04 18:25:52 +08:00
    @coldmonkeybit #4 我也一直有这个疑问,像 Java 里单例第一步就是构造器 private,在外边根本就创建不了这个类的实例,但是 go 好像就只能凭使用者自觉了
    brucewuio
        8
    brucewuio  
       2020-06-06 23:22:28 +08:00   ❤️ 1
    @asAnotherJack 你可以让 A 也不对外暴露,每次 Create 返回同一个
    asAnotherJack
        9
    asAnotherJack  
       2020-06-08 10:53:07 +08:00
    @brucewuio #8 刚试了下,不对外暴露的 struct 居然可以有 public 的方法和字段,学到了。但是总感觉有点怪怪的……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4429 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 10:12 · PVG 18:12 · LAX 03:12 · JFK 06:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.