您的位置:首页 > 编程语言 > Go语言

利用golang中的chan数据类型来实现简易连接池

2010-12-30 14:11 211 查看
chan其实是一个队列,而且是一个带有锁等待功能的队列,因此用它可以做很多任务队列相关的工作,比如说连接池。最近打算用go来写一个小的软件配置管理系统,使用中发现没有连接池,于是就是chan写了一个简单的,使用了一下发现相当好用。

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语言的表现力确实很令人兴奋。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: