Golang单例模式懒汉与饿汉实现示例

Go语言中单例模式分为饿汉和懒汉模式:饿汉模式在包加载时创建实例,线程安全,适用于轻量且必用场景;懒汉模式首次调用时初始化,节省资源,需用sync.Once保证并发安全,适合高开销或可能不用的对象。

golang单例模式懒汉与饿汉实现示例

在Go语言中,单例模式是一种常见的设计模式,用于确保一个类在整个程序运行期间只有一个实例。根据实例创建的时机不同,可分为“饿汉模式”和“懒汉模式”。下面分别介绍这两种方式的实现。

饿汉模式(Eager Initialization)

饿汉模式在包加载时就创建好实例,线程安全,适用于实例初始化成本不高且一定会用到的场景。

示例代码:

package singletonimport "fmt"// 定义单例结构体type Singleton struct {    Data string}// 包初始化时直接创建实例var instance = &Singleton{Data: "饿汉模式实例"}// GetInstance 返回唯一实例func GetInstance() *Singleton {    return instance}// 使用示例func ExampleEager() {    s1 := GetInstance()    s2 := GetInstance()    fmt.Println(s1 == s2) // 输出 true,证明是同一个实例}

懒汉模式(Lazy Initialization)

懒汉模式在第一次调用获取实例方法时才创建,可以延迟资源消耗,但需注意并发安全问题。使用 sync.Once 可保证只初始化一次。

示例代码:

package singletonimport (    "sync")// 定义单例结构体type Singleton struct {    Data string}var (    instanceLazy *Singleton    once         = &sync.Once{})// GetInstanceLazy 第一次调用时创建实例func GetInstanceLazy() *Singleton {    once.Do(func() {        instanceLazy = &Singleton{Data: "懒汉模式实例"}    })    return instanceLazy}// 使用示例func ExampleLazy() {    s1 := GetInstanceLazy()    s2 := GetInstanceLazy()    fmt.Println(s1 == s2) // 输出 true}

两种模式对比与选择建议

实际开发中可根据需求选择合适的实现方式:

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

饿汉模式:启动即创建,简单安全,适合轻量且必用的对象 懒汉模式:按需创建,节省资源,适合初始化开销大或可能不用的情况 并发环境下推荐使用 sync.Once 实现懒加载,避免竞态条件基本上就这些,Go语言通过包级变量和 sync 包能简洁高效地实现单例模式。

以上就是Golang单例模式懒汉与饿汉实现示例的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1411225.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月16日 04:01:16
下一篇 2025年12月16日 04:01:23

相关推荐

发表回复

登录后才能评论
关注微信