1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| package main
import ( "sync" "sync/atomic" )
type apple struct{}
var singleApple *apple
var initialized uint32
var lock sync.Mutex
func GetSingleApple() *apple { if atomic.LoadUint32(&initialized) == 1 { return singleApple } else { lock.Lock() defer lock.Unlock() } if singleApple == nil { atomic.StoreUint32(&initialized, 1) singleApple = new(apple) } return singleApple }
func (apple) doSomething() {}
func main() { var apple *apple = GetSingleApple() apple.doSomething() }
|