首页 > 后端开发 > Golang > 正文

Golang如何实现单例模式_Golang Singleton模式实现方法总结

P粉602998670
发布: 2025-12-05 16:21:32
原创
430人浏览过
Go中单例模式通过包级变量和函数实现,常见方式包括:1. 懒汉模式(非并发安全)在首次调用时创建实例,但多协程下存在竞态条件;2. 加锁实现通过sync.Mutex确保线程安全,但每次调用均加锁影响性能;3. 双重检查锁定推荐使用sync.Once,保证初始化函数仅执行一次,兼具安全与效率;4. 饿汉模式在包初始化时创建实例,天然并发安全,适用于初始化成本低的场景。最推荐sync.Once实现的懒加载,兼顾安全性与性能,饿汉模式适合简单场景,选择依据为是否需延迟初始化、性能要求及代码可读性。

golang如何实现单例模式_golang singleton模式实现方法总结

在Go语言中,单例模式用于确保一个类型仅被实例化一次,并提供一个全局访问点。由于Go没有类的概念,通常使用包级变量和函数来实现单例。以下是几种常见的实现方式及其特点。

1. 懒汉模式(非并发安全)

懒汉模式在第一次调用时才创建实例,适合资源初始化较重的场景。但未加锁时在多协程下可能创建多个实例。

示例代码:
var instance *Singleton
type Singleton struct{}

func GetInstance() *Singleton {
    if instance == nil {
        instance = &Singleton{}
    }
    return instance
}
登录后复制

这种方式简单,但在高并发下存在竞态条件,不推荐在生产环境直接使用。

2. 加锁实现(并发安全但性能较低)

通过sync.Mutex保证只有一个协程能创建实例,解决并发问题。

立即学习go语言免费学习笔记(深入)”;

var (
    instance *Singleton
    mu       sync.Mutex
)

func GetInstance() *Singleton {
    mu.Lock()
    defer mu.Unlock()
    if instance == nil {
        instance = &Singleton{}
    }
    return instance
}
登录后复制

虽然线程安全,但每次调用都加锁,影响性能。

Convai Technologies Inc.
Convai Technologies Inc.

对话式 AI API,用于设计游戏和支持端到端的语音交互

Convai Technologies Inc. 87
查看详情 Convai Technologies Inc.

3. 双重检查锁定(推荐写法之一)

在加锁前后都检查实例是否已创建,减少锁竞争。

var instance *Singleton
var once sync.Once

func GetInstance() *Singleton {
    if instance == nil {
        once.Do(func() {
            instance = &Singleton{}
        })
    }
    return instance
}
登录后复制
注意: 上面写法有误,正确应只用sync.Once,无需手动判空。 更正如下:
var instance *Singleton
var once sync.Once

func GetInstance() *Singleton {
    once.Do(func() {
        instance = &Singleton{}
    })
    return instance
}
登录后复制

利用sync.Once保证函数仅执行一次,既安全又高效,是推荐做法。

4. 包初始化时创建(饿汉模式)

利用Go的init函数或包变量在程序启动时完成初始化。

var instance = &Singleton{}

type Singleton struct{}

func GetInstance() *Singleton {
    return instance
}
登录后复制

实例在包加载时就创建,天然并发安全,适用于初始化成本不高且必定使用的场景。

基本上就这些常见方式。最推荐的是sync.Once实现的懒加载,兼顾安全与性能。饿汉模式适合简单直接的场景。选择哪种方式取决于具体需求:是否需要延迟初始化、对性能的要求、代码可读性等。

以上就是Golang如何实现单例模式_Golang Singleton模式实现方法总结的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号