登录
首页 >  Golang >  Go问答

单例

来源:Golang技术栈

时间:2023-04-12 14:44:24 384浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《单例》,这篇文章主要讲到golang等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

在 Go 编程语言中如何实现单例设计模式?

正确答案

撇开单例模式是否是一个好主意的争论,这里有一个可能的实现:

package singleton

type single struct {
        O interface{};
}

var instantiated *single = nil

func New() *single {
        if instantiated == nil {
                instantiated = new(single);
        }
        return instantiated;
}

single并且instantiated是私有的,但是New()是公共的。因此,您不能在不single通过的情况下直接实例化New(),它会使用私有 boolean 跟踪实例化的数量instantiated。调整single口味的定义。

但是,正如其他几个人所[指出](http://marcio.io/2015/07/singleton-pattern-in- go/)的那样,这不是线程安全的,除非您只是在init(). 更好的方法是利用sync.Once为您完成艰苦的工作:

package singleton

import "sync"

type single struct {
        O interface{};
}

var instantiated *single
var once sync.Once

func New() *single {
        once.Do(func() {
                instantiated = &single{}
        })
        return instantiated
}

另请参阅 hasan j 的建议,即仅将包 视为 单例。最后,请考虑其他人的建议:单例通常是有问题的实现的指标。

文中关于golang的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《单例》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>