golang mysql单例模式_Golang设计模式——单例模式
要点: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设计模式——单例模式相关推荐
- java单例模式_java设计模式-单例模式
1.单例(Singleton)模式定义 指一个类只有一个实例,且该类能自行创建这个实例的一种模式. 2.单例模式特点 单例类只有一个实例对象: 该单例对象必须由单例类自行创建: 单例类对外提供一个访问 ...
- golang mysql 事务_golang的嵌套事务管理-Go语言中文社区
golang的事务管理是一件很麻烦的事,,能不能像Java那样,通过Spring管理事务,最近琢磨了一下,写了一个demo,用来管理golang的事务,使其支持golang事务的嵌套调用. 其思想很简 ...
- golang mysql 回调_Golang操作MySQL的正确姿势
封装原因: 查看了很多网上提供的ORM类型的数据库操作,觉得比较麻烦,需要提前配置很多的表结构体,然后才能使用,对于数据表很多的项目就配置起来就比较麻烦,所以对golang的mysql包进行了外层包装 ...
- golang mysql 中间件_golang编写的数据库中间件kingshard
偶然网上看到这个kingshard,自己对golang感兴趣就试玩了一下,可以正常跑成功. 数据库中间件是什么呢?简单的说和数据库类似,不同的是当程序里发送sql给它的时候,它会根据配置对sql进行分 ...
- golang mysql单元测试_golang test测试使用
1.创建测试文件夹mysql,文件夹下的go文件的package必须与文件夹名一致(不然会识别不到) 2.创建需要测试的文件mysql.go(使用github.com/go-sql-driver/my ...
- golang mysql 超时_golang中mysql建立连接超时时间timeout 测试
本文测试连接mysql的超时时间. 这里的"连接"是建立连接的意思. 连接mysql的超时时间是通过参数timeout设置的. 1.建立连接超时测试 下面例子中,设置连接超时时间为 ...
- golang mysql封装_golang如何封装路由
封装方式一.路由写在 main函数中,数据库初始连接放在 init() 函数中.. 首先看 main.go 一个初始化函数,初始化 dbfunc init() { db.Connect() } 第二, ...
- golang mysql 单元测试_golang 之单元测试
测试 测试是自动化测试的简称,即编写简单的程序来确保程序(产品代码)在测试中针对特定输入产生预期的输出.Go的测试方法看上去相对比较低级,它依赖于命令go test和一些能用go test运行的测试函 ...
- Go 语言实现 23 种设计模式 单例模式
Go 语言实现 23 种设计模式 单例模式 单例模式 单例模式是一种常用的软件设计模式,在使用过程中,单例对象的类只有一个实例.使用单例模式,1 可以节省内存等资源,例如windows操作系统的资源管 ...
最新文章
- 鸿蒙就是安卓换皮_被喷换皮安卓?华为手机鸿蒙OS Beta版今日上线
- webform repeater
- Python是世界上最好的语言,你不服不行!(附资料)
- 经典C语言程序100例之六零
- scrapy发送翻页请求
- 【1】C++语法与数据结构之C语言学生管理系统转C++学生管理系统
- linux 多线程客户端服务端通信,[转载]多线程实现服务器和客户端、客户端和客户端通信;需要代码,留言...
- 信息学奥赛一本通(1247:河中跳房子)
- JZs3c2440裸板程序GPIO操作总结
- python3.5安装教程linux_Linux下安装python3.6和第三方库的教程详解
- VSCode中使用Git忽略提交代码设置
- Python面向对象:类
- 数据库基础(常用SQL语句)
- 软件设计师视频教程百度网盘
- ShadowGun 图形技术分析
- SQL笔面试题:如何求取中位数?
- 转载:HTTP调试工具:Fiddler的使用方法介绍
- 【GDOI2014模拟】​Pty爬山
- 洛谷 P1562 智破连环阵 题解(搜索)
- sRGB Color Space
热门文章
- 湖南工业大学c语言在线作业答案,湖南工业大学C语言期末考试复习题(机房题库)...
- 代理服务器ip地址搜索验证软件_代理服务器与ip分类介绍
- Python笔记之读取yaml文件
- 百变方块java代码_多牛百变方块
- python桌面程序打开慢_转 : 终于搞清楚了为什么Java桌面程序总是感觉慢的原因...
- 里的type_拥有Type-C接口等于拥有PD快充?当然不是!
- oracle2db2,从Oracle 到DB2(二)
- linux系统中如何安装qwt,在Linux上部署Qt及Qwt
- 防蓝光膜真的能阻挡蓝光,减小辐射吗?
- java匿名类对象的坏处_java匿名内部类的使用注意事项