只允许一次

2021-04-09  本文已影响0人  MrBryan
package singleton

import (
    "fmt"
    "sync"
    "testing"
    "unsafe"
)

type Singleton struct {
}

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.Println(unsafe.Pointer(obj))
            wg.Done()
        }()
    }

    wg.Wait()
}

上一篇 下一篇

猜你喜欢

热点阅读