单例模式就是为了保证一个类全局只有一个实例。且能够被外部使用。
Golang 实现
利用 lock 实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| package single
import "sync"
var lock = sync.Mutex{}
type single struct {}
var singles *single
func NewSingle() *single {
lock.Lock()
defer lock.Unlock()
if singles == nil {
singles = &single{}
}
return singles
}
|
利用 Sync.Once 实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| package single
import "sync"
type single2 struct {}
var single2Instance *single2
func NewSingle2() *single2 {
new(sync.Once).Do(func() {
single2Instance = &single2{}
})
return single2Instance
}
|