gof23创建类模式(golang版)

栏目: Go · 发布时间: 7年前

内容简介:区块链的征程已开启Java中的单例模式的实现可以有饿汉式、懒汉式、双锁、静态内部类、枚举等形式,在go中如何实现单例呢,先来最简单的形式,不考虑高并发的情况下,应该怎样实现问题就是并发的时候会取到多个对象,解决方案

区块链的征程已开启

单例模式

Java中的单例模式的实现可以有饿汉式、懒汉式、双锁、静态内部类、枚举等形式,在 go 中如何实现单例呢,先来最简单的形式,不考虑高并发的情况下,应该怎样实现

package main

var m *Singleton

type Singleton struct {
}

func GetInstance() *Singleton {
    if m == nil {
        m = &Singleton{}
    }
    return m
}

问题就是并发的时候会取到多个对象,解决方案

加锁

package main

import (
    "sync"
)

var instance *Singleton
var lock *sync.Mutex = &sync.Mutex{}

type Singleton struct {
}

func GetInstance() *Singleton {

    lock.Lock()
    defer lock.Unlock()

    if instance != nil {
        instance = &Singleton{}
    }
    return instance
}

go语言特性,支持一种更为方便的加锁:sync.Once

package main

import (
    "sync"
)

var (
    instance *Singleton
    lock     *sync.Mutex = &sync.Mutex{}
    once sync.Once
)

type Singleton struct {
}

func GetInstance() *Singleton {

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

微信思维

微信思维

谢晓萍 / 羊城晚报出版社 / 2014-11 / 49

微信团队&萤火科技联合策划 一部记录微信如何渗入商业血脉,推动社会进化的力作一起来看看 《微信思维》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具