golang 单例模式

Table of Contents

    单例模式(Singleton Pattern)是最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

    要保证线程安全

    package main
    
    import (
    	"fmt"
    	"sync"
    	"time"
    )
    
    type Singleton struct {
    }
    
    var singleton *Singleton
    var singletonOnce sync.Once
    
    func Instance() *Singleton {
    	singletonOnce.Do(func() {
    		singleton = &Singleton{}
    	})
    	return singleton
    }
    
    func (s *Singleton) print() {
    	fmt.Printf("address: %p\n", s)
    }
    
    func main() {
    	Instance().print()
    	Instance().print()
    	go Instance().print()
    	go Instance().print()
    	time.Sleep(100 * time.Millisecond)
    }