golang单例模式教学

admin 2024-11-22 23:51:18 编程 来源:ZONE.CI 全球网 0 阅读模式

在Go语言(Golang)开发中,单例模式是一种非常常用的设计模式。顾名思义,单例模式即保证一个类只有一个实例,并提供一个全局访问点来获取这个唯一实例。单例模式在某些场景下非常有用,比如数据库连接池、线程池、日志记录器等。接下来,我们将介绍Golang的单例模式并通过实例进行讲解。

懒汉式单例模式

懒汉式单例模式是指在实际使用的时候才去创建对象实例。在Golang中,可以利用sync包和Once类型来实现懒汉式单例模式的线程安全。

首先,我们定义一个结构体Singleton,其中包含一个私有变量instance用于保存唯一实例的地址,并定义了GetInstance函数来获取该实例,代码如下:

type Singleton struct {
}

var instance *Singleton
var once sync.Once

func GetInstance() *Singleton {
    once.Do(func() {
        instance = &Singleton{}
    })
    return instance
}

饿汉式单例模式

饿汉式单例模式与懒汉式不同,它在程序启动时就创建唯一实例。在Golang中,可以通过变量初始化的方式实现饿汉式单例模式。

我们定义一个变量instance,并在init函数中进行实例化,代码如下:

type Singleton struct {
}

var instance = &Singleton{}

func GetInstance() *Singleton {
    return instance
}

线程安全的懒汉式单例模式

在懒汉式单例模式中,存在并发访问时实例多次创建的问题。为了解决这个问题,可以使用互斥锁进行线程安全的处理。

我们在懒汉式单例模式的基础上引入一个互斥锁mutex,并在GetInstance函数中对其进行加锁操作,代码如下:

type Singleton struct {
}

var instance *Singleton
var once sync.Once
var mutex sync.Mutex

func GetInstance() *Singleton {
    if instance == nil {
        mutex.Lock()
        defer mutex.Unlock()
        if instance == nil {
            instance = &Singleton{}
        }
    }
    return instance
}
以太坊cppgolang区别 编程

以太坊cppgolang区别

以太坊是一种去中心化的开源平台,它采用智能合约技术,旨在构建和运行不受干扰的分布式应用程序。作为目前最受欢迎的区块链平台之一,以太坊提供了多种编程语言的支持,其
progolang 编程

progolang

Go语言(Golang)是由Google开发的一门静态类型编程语言。作为一名专业的Golang开发者,我深知这门语言的优势和特点。在本文中,我将介绍Golang
golangn个发送者 编程

golangn个发送者

Golang是一种开源的编程语言,由Google团队开发,旨在提高程序的并发性和简化软件开发过程。在Go语言中,有时需要向多个接收者发送信息。本文将介绍如何在G
golang技能图谱 编程

golang技能图谱

从互联网行业的快速发展到人工智能技术的日益成熟,各种编程语言也应运而生。而在这众多的编程语言中,Golang(即Go)作为一门强大且高效的开发语言备受关注。Go
评论:0   参与:  16