写点什么

单例模式

用户头像
猴子胖胖
关注
发布于: 2020 年 11 月 08 日

golang 设计模式

https://github.com/kaysun/go_design_pattern.git


单例模式,保证全局只有一个对象实例。能够避免对象重复创建带来的开销。

当前文章假设调用者不会跟单例结构体在一个目录下,私有的结构体无法直接创建。


// package singleton 单例模式package singleton
import ( "fmt" "sync")
var ( // once 保证只执行一次 once sync.Once
// instance 单例对象 instance *singleton)
// singleton 单例类型结构体type singleton struct { // Title 标题 Title string}
// GetInstance 获取单例对象。 注:必须使用指针对象,否则会在返回时,拷贝一份,对象就不是同一个了。func GetInstance(title string) *singleton { once.Do(func() { fmt.Println("执行获取单例对象") instance = &singleton{Title: title} }) return instance}

复制代码


package singleton
import ( "fmt" "testing")
func Test(t *testing.T) { t.Run("singleton: ", GetSingleton)}
func GetSingleton(t *testing.T) { /* 执行结果: 执行获取单例对象 instance1 = 0xc0000584a0, name=标题1 instance2 = 0xc0000584a0, name=标题1 */
instance1 := GetInstance("标题1") fmt.Println(fmt.Sprintf("instance1 = %p, name=%s", instance1, instance1.Title))
instance2 := GetInstance("标题2") fmt.Println(fmt.Sprintf("instance2 = %p, name=%s", instance2, instance2.Title))}
复制代码


输出

执行获取单例对象instance1 = 0xc00005e4a0, name=标题1instance2 = 0xc00005e4a0, name=标题1
复制代码


发布于: 2020 年 11 月 08 日阅读数: 31
用户头像

猴子胖胖

关注

6年ios开发,1年golang开发 2020.05.09 加入

还未添加个人简介

评论

发布
暂无评论
单例模式