Go语言之单例

单例模式是比较常用的设计模式,现在用Go简单的实现一个单例

type Singleton struct {
    data string
}

var singleInstance *Singleton
var once sync.Once

func GetSingletonObj() *Singleton {
    once.Do(func() {
        fmt.Println("Create Obj")
        singleInstance = new(Singleton)
    })
    return singleInstance
}

func TestGetSingletonObj(t *testing.T) {
    var wg sync.WaitGroup
    for i := 0; i < 10; i++ {
        wg.Add(1)
        go func() {
            obj := GetSingletonObj()
            fmt.Printf("%X\n", unsafe.Pointer(obj))
            wg.Done()
        }()
    }
    wg.Wait()
}
---------------打印结果---------------
Create Obj
C000064170
C000064170
C000064170
C000064170
C000064170
C000064170
C000064170
C000064170
C000064170
C000064170

上述代码可见,打印出来的对象都同一个,也就是说此对象只被创建了一次。

你可能感兴趣的:(Go语言之单例)