要点:sync.Once 的应用

高并发场景下读写锁

package singleton

import "sync"

var  (

p *Pet

once sync.Once

)

func init(){

once.Do(

func() {

p = &Pet{}

})

}

func GetInstance() *Pet{

return p

}

type Pet struct {

Name string

Age int

m sync.Mutex

}

func (p *Pet)GetName()string{

return p.Name

}

func (p *Pet) GetAge() int{

return p.Age

}

func(p *Pet) SetName(name string) {

p.m.Lock()

defer p.m.Unlock()

p.Name = name

}

func(p *Pet) IncAge() {

p.m.Lock()

defer p.m.Unlock()

p.Age++

}

测试用例package singleton

import "testing"

func TestGetInstance(t *testing.T) {

p := GetInstance()

p.SetName("tommy")

p.IncAge()

p.GetName()

p.GetAge()

}

测试并发场景func IncAgeTest1(){

p = GetInstance()

p.IncAge()

}

func IncAgeTest2(){

p = GetInstance()

p.IncAge()

}package singleton

import (

"fmt"

"sync"

"testing"

)

func TestGetInstance(t *testing.T) {

wg := sync.WaitGroup{}

wg.Add(200)

for i:=0;i<100;i++{

go func() {

defer wg.Done()

IncAgeTest1()

}()

go func() {

defer wg.Done()

IncAgeTest2()

}()

}

wg.Wait()

p := GetInstance()

fmt.Println(p.Age)

}// output

=== RUN   TestGetInstance

200

golang mysql单例模式_Golang设计模式——单例模式相关推荐

  1. java单例模式_java设计模式-单例模式

    1.单例(Singleton)模式定义 指一个类只有一个实例,且该类能自行创建这个实例的一种模式. 2.单例模式特点 单例类只有一个实例对象: 该单例对象必须由单例类自行创建: 单例类对外提供一个访问 ...

  2. golang mysql 事务_golang的嵌套事务管理-Go语言中文社区

    golang的事务管理是一件很麻烦的事,,能不能像Java那样,通过Spring管理事务,最近琢磨了一下,写了一个demo,用来管理golang的事务,使其支持golang事务的嵌套调用. 其思想很简 ...

  3. golang mysql 回调_Golang操作MySQL的正确姿势

    封装原因: 查看了很多网上提供的ORM类型的数据库操作,觉得比较麻烦,需要提前配置很多的表结构体,然后才能使用,对于数据表很多的项目就配置起来就比较麻烦,所以对golang的mysql包进行了外层包装 ...

  4. golang mysql 中间件_golang编写的数据库中间件kingshard

    偶然网上看到这个kingshard,自己对golang感兴趣就试玩了一下,可以正常跑成功. 数据库中间件是什么呢?简单的说和数据库类似,不同的是当程序里发送sql给它的时候,它会根据配置对sql进行分 ...

  5. golang mysql单元测试_golang test测试使用

    1.创建测试文件夹mysql,文件夹下的go文件的package必须与文件夹名一致(不然会识别不到) 2.创建需要测试的文件mysql.go(使用github.com/go-sql-driver/my ...

  6. golang mysql 超时_golang中mysql建立连接超时时间timeout 测试

    本文测试连接mysql的超时时间. 这里的"连接"是建立连接的意思. 连接mysql的超时时间是通过参数timeout设置的. 1.建立连接超时测试 下面例子中,设置连接超时时间为 ...

  7. golang mysql封装_golang如何封装路由

    封装方式一.路由写在 main函数中,数据库初始连接放在 init() 函数中.. 首先看 main.go 一个初始化函数,初始化 dbfunc init() { db.Connect() } 第二, ...

  8. golang mysql 单元测试_golang 之单元测试

    测试 测试是自动化测试的简称,即编写简单的程序来确保程序(产品代码)在测试中针对特定输入产生预期的输出.Go的测试方法看上去相对比较低级,它依赖于命令go test和一些能用go test运行的测试函 ...

  9. Go 语言实现 23 种设计模式 单例模式

    Go 语言实现 23 种设计模式 单例模式 单例模式 单例模式是一种常用的软件设计模式,在使用过程中,单例对象的类只有一个实例.使用单例模式,1 可以节省内存等资源,例如windows操作系统的资源管 ...

最新文章

  1. 鸿蒙就是安卓换皮_被喷换皮安卓?华为手机鸿蒙OS Beta版今日上线
  2. webform repeater
  3. Python是世界上最好的语言,你不服不行!(附资料)
  4. 经典C语言程序100例之六零
  5. scrapy发送翻页请求
  6. 【1】C++语法与数据结构之C语言学生管理系统转C++学生管理系统
  7. linux 多线程客户端服务端通信,[转载]多线程实现服务器和客户端、客户端和客户端通信;需要代码,留言...
  8. 信息学奥赛一本通(1247:河中跳房子)
  9. JZs3c2440裸板程序GPIO操作总结
  10. python3.5安装教程linux_Linux下安装python3.6和第三方库的教程详解
  11. VSCode中使用Git忽略提交代码设置
  12. Python面向对象:类
  13. 数据库基础(常用SQL语句)
  14. 软件设计师视频教程百度网盘
  15. ShadowGun 图形技术分析
  16. SQL笔面试题:如何求取中位数?
  17. 转载:HTTP调试工具:Fiddler的使用方法介绍
  18. 【GDOI2014模拟】​Pty爬山
  19. 洛谷 P1562 智破连环阵 题解(搜索)
  20. sRGB Color Space

热门文章

  1. 湖南工业大学c语言在线作业答案,湖南工业大学C语言期末考试复习题(机房题库)...
  2. 代理服务器ip地址搜索验证软件_代理服务器与ip分类介绍
  3. Python笔记之读取yaml文件
  4. 百变方块java代码_多牛百变方块
  5. python桌面程序打开慢_转 : 终于搞清楚了为什么Java桌面程序总是感觉慢的原因...
  6. 里的type_拥有Type-C接口等于拥有PD快充?当然不是!
  7. oracle2db2,从Oracle 到DB2(二)
  8. linux系统中如何安装qwt,在Linux上部署Qt及Qwt
  9. 防蓝光膜真的能阻挡蓝光,减小辐射吗?
  10. java匿名类对象的坏处_java匿名内部类的使用注意事项