Golang 实现单例模式

97 阅读1分钟

在 Go 中实现单例模式有几种方法,以下是其中两种常见的方法:

方法一:基于包级别变量

package singleton

type singleton struct {
    // 可以在这里添加单例需要的其他字段
}

var instance *singleton

func GetInstance() *singleton {
    if instance == nil {
        instance = &singleton{}
    }
    return instance
}

在这种方法中,通过在包级别声明变量 instance 来存储单例对象,并且在 GetInstance 函数中对其进行初始化。这种方法是最简单和直接的,但是不是线程安全的。

方法二:基于 sync.Once

package singleton

import (
    "sync"
)

type singleton struct {
    // 可以在这里添加单例需要的其他字段
}

var instance *singleton
var once sync.Once

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

在这种方法中,我们使用了 sync.Once 来确保 GetInstance 函数只被执行一次。这种方法是线程安全的,并且能够保证只有一个实例被创建。