go语言内置的 database/sql 标准库本就是连接池的设计。
我们只需要下载对应数据的驱动,这里以mysql为例:
go get -u github.com/go-sql-driver/mysql
然后按以下方式先定义全局的mysql连接对象db,然后后续所有的数据库操作都使用db就可以了,这就是官方实现的连接池方式。
// 定义一个全局对象db
var db *sql.DB
// 定义一个初始化数据库的函数
func initDB() (err error) {
// DSN:Data Source Name
dsn := "user:password@tcp(127.0.0.1:3306)/test"
// 不会校验账号密码是否正确
// 注意!!!这里不要使用:=,我们是给全局变量赋值,然后在main函数中使用全局变量db
db, err = sql.Open("mysql", dsn)
if err != nil {
return err
}
// 尝试与数据库建立连接(校验dsn是否正确)
err = db.Ping()
if err != nil {
return err
}
return nil
}
func main() {
err := initDB() // 调用输出化数据库的函数
if err != nil {
fmt.Printf("init db failed,err:%v\n", err)
return
}
}
其中sql.DB是一个数据库(操作)句柄,代表一个具有零到多个底层连接的连接池。它可以安全的被多个go程同时使用。database/sql包会自动创建和释放连接;它也会维护一个闲置连接的连接池。
我们还可以通过以下方法设置数据库的最大连接数:
func (db *DB) SetMaxOpenConns(n int)
通过以下方法设置数据库的最大空闲连接数:
func (db *DB) SetMaxIdleConns(n int)