gof23创建类模式(golang版)

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

内容简介:区块链的征程已开启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-7 / 69.00元

本书详细介绍了计算机网络硬件的相关知识,在对硬件设备、相关技术及规范进行详尽考据和整理的同时,侧重工程实践,重点讲述了在实际网络建设工程中真实使用的网络硬件设备及其相关背景知识,能够帮助读者深入理解计算机网络在工程实践中某些容易混淆的概念,如L3交换机和路由器等。 本书在讲解的同时,还辅以丰富的图例,使计算机网络设备的真实情况一目了然,同时深入浅出地介绍了原本复杂抽象的计算机网络术语,因此对......一起来看看 《图解网络硬件》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具