利用golang中的chan数据类型来实现简易连接池
2010-12-30 14:11
211 查看
chan其实是一个队列,而且是一个带有锁等待功能的队列,因此用它可以做很多任务队列相关的工作,比如说连接池。最近打算用go来写一个小的软件配置管理系统,使用中发现没有连接池,于是就是chan写了一个简单的,使用了一下发现相当好用。
短短几十行代码就可以实现一个较为完美的连接池功能,go语言的表现力确实很令人兴奋。
var MySQLPool chan *mysql.MySQL func getMySQL() *mysql.MySQL { if MySQLPool == nil { MySQLPool = make(chan *mysql.MySQL, MAX_POOL_SIZE) } if len(MySQLPool) == 0 { go func() { for i := 0; i < MAX_POOL_SIZE/2; i++ { mysql := mysql.New() err := mysql.Connect("127.0.0.1", "root", "", "wgt", 3306) if err != nil { panic(err.String()) } putMySQL(mysql) } }() } return <-MySQLPool } func putMySQL(conn *mysql.MySQL) { if MySQLPool == nil { MySQLPool = make(chan *mysql.MySQL, MAX_POOL_SIZE) } if len(MySQLPool) == MAX_POOL_SIZE { conn.Close() return } MySQLPool <- conn }
短短几十行代码就可以实现一个较为完美的连接池功能,go语言的表现力确实很令人兴奋。
相关文章推荐
- 关于OpenCV中利用函数cvConvert实现图像数据类型转换(8U->16S)
- 利用基本数据类型的包装类中的方法实现类型转换
- 利用抽象工厂实现自定义多数据类型接口
- 【GoLang】golang底层数据类型实现原理
- 利用stringstream实现数据类型的转换。
- Mongodb 利用mongoshell进行数据类型转换的实现方法
- 编码实现Spring 利用@Resource注解实现bean的注入,xml实现基本数据类型的注入
- Effective C# 学习笔记(四十一)使利用DynamicObject或IDynamicMetaObjectProvider接口实现数据驱动的动态类型
- 数据结构与算法:单链表(利用万能指针实现对任意类型数据进行操作)
- 利用C#2005实现数据表的基本操作
- Golang基本数据类型,常量,标识符
- Java关于简易数据单链表的实现
- 利用golang实现与boost中asio相同的功能
- 在SQL和ERWIN中用自定义类型、规则和默认值实现check约束从而保证数据的完整性
- Android 利用剪切板(clipboardManager )实现数据传递
- 简单实现利用java将数据写入到excel
- 利用 js-xlsx 实现 Excel 文件导入并解析Excel数据成json格式的数据
- Hibernate实现Oracle Blob/Clob类型数据读写
- iOS平台利用 NSURLProtocol 实现网络数据缓存
- 安卓 实现缓存机制,多种数据类型缓存