博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
golang设计模式 - 单例模式
阅读量:3986 次
发布时间:2019-05-24

本文共 694 字,大约阅读时间需要 2 分钟。

单例

golang中实现单例模式非常简单,那就是使用指针对象。

根据对象的实例化时间,可以分为饿汉式和懒汉式。

对象

type Person struct {
Name string Age int}

并发测试

func main() {
var wg sync.WaitGroup for i := 0; i < 10; i++ {
wg.Add(1) go func() {
ins := GetInstance() fmt.Printf("%p\n", ins) wg.Done() }() } wg.Wait()}
饿汉式

直接创建好对象,这样不需要判断为空,同时也是线程安全。唯一的缺点是在导入包的同时会创建该对象,并持续占有在内存中。

1、直接调用

var Ps = &Person{
"raoxiaoya", 12}

2、间接调用

var ps = &Person{
"raoxiaoya", 12}func GetInstance() *Person {
return ps}
懒汉式

对象只有在调用GetInstance方法的时候才会实例化,节省资源。

var ps *Personvar once sync.Oncefunc GetInstance() *Person {
once.Do(func(){
ps = &Person{
"raoxiaoya", 12} }) return ps}

如果不加once,那么每次调用GetInstance都会给ps赋值不同的对象。

转载地址:http://zcaui.baihongyu.com/

你可能感兴趣的文章
1.3 Debugging of Shaders (调试着色器)
查看>>
关于phpcms中模块_tag.class.php中的pc_tag()方法的含义
查看>>
vsftp 配置具有匿名登录也有系统用户登录,系统用户有管理权限,匿名只有下载权限。
查看>>
linux安装usb wifi接收器
查看>>
关于共享单车定位不准问题
查看>>
ubuntu误删文件造成软件包信息列表损坏无法更新或安装文件
查看>>
终于搞定CString和string之间转换的问题了
查看>>
用防火墙自动拦截攻击IP
查看>>
补充自动屏蔽攻击ip
查看>>
多字节与UTF-8、Unicode之间的转换
查看>>
通信和通讯有什么区别?
查看>>
谷歌走了
查看>>
多线程使用随机函数需要注意的一点
查看>>
getpeername,getsockname
查看>>
让我做你的下一行Code
查看>>
浅析:setsockopt()改善程序的健壮性
查看>>
关于对象赋值及返回临时对象过程中的构造与析构
查看>>
VS 2005 CRT函数的安全性增强版本
查看>>
SQL 多表联合查询
查看>>
Visual Studio 2010:C++0x新特性
查看>>