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)