模式意图
保证一个类只用一个实例,并且提供一个全局访问点
类图
应用场景
1.需要更严格地控制全局变量时,使用单例模式;
2.重量级的对象如线程池对象,数据库连接池对象,不需要多个实例的对象如工具类等。
工程目录
Signle.go
package Single
import "sync"
type Single struct {
data int
}
var singleton *Single
var once sync.Once
func GetInterface() *Single{
once.Do(func (){singleton = &Single{data: 100}}) //单例
//singleton = &Single{data: 100} //非单例
return singleton
}
Signle_test.go
package Single
import (
"fmt"
"testing"
)
func TestSignle (t *testing.T) {
s1 := GetInterface()
s2 := GetInterface()
if s1 == s2 {
fmt.Println("单例")
} else {
fmt.Println("非单例")
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。