学习Go语言之单例模式

单例模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象

 

 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 }

 

posted @ 2019-06-03 14:52  卓扬  阅读(314)  评论(0编辑  收藏  举报