Go实现单例模式

1、概念

单例模式:一个只允许创建一个实例的类叫做单例类,这种模式称为单例模式。

2、作用

类的实例具有全局唯一性,适用于一些场景,如管理配置的类,写log的类等,这种类只需要一个全局的实例来共享资源,无需创建多个实例,单例模式有利用节约资源、防止多个实例产生冲突。

3、实现例子

package singleton

import (
    "fmt"
    "sync"
)

var (
    lock     sync.Mutex
    instance *singleton
)

type singleton struct {
    Data int
    name string
}

func (s *singleton) String() string {
    return fmt.Sprintf("singleton data:%v, name:%v", s.Data, s.name)
}

// 懒汉式
func NewSingleton(data int, name string) *singleton {
    if instance == nil {
        lock.Lock()
                // 双重判断
        if instance == nil {
            instance = &singleton{
                Data: data,
                name: name,
            }
        }
        lock.Unlock()
    }
    return instance
}

// 饿汉式
var SingletonInstance *singleton = &singleton{2, "饿汉"}

总结:在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例。

posted @ 2023-09-24 15:36  美好生活我心往之  阅读(21)  评论(0编辑  收藏  举报