单例模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象
1 // 单例模式 2 package main 3 4 import ( 5 "fmt" 6 "sync" 7 ) 8 9 type manager struct{} 10 11 // var iMutex *sync.Mutex = &sync.Mutex{} 12 var once sync.Once 13 14 var m *manager 15 16 func Instance() *manager { 17 // if m == nil { 18 // iMutex.Lock() 19 // defer iMutex.Unlock() 20 // if m == nil { 21 // m = new(manager) 22 // } 23 // } 24 25 //sync.Once,它有一个Do方法,在它中的函数go会只保证仅仅调用一次。所以可以不使用双重排它锁 26 once.Do(func() { 27 m = &manager{} 28 }) 29 30 return m 31 } 32 33 func (p manager) Manage() { 34 fmt.Println("manage...") 35 } 36 37 func main() { 38 Instance().Manage() 39 }