MySQL 的连接和初始化
main.go
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql" // init()
"time"
)
// sql.DB 是表示连接的数据库对象(结构体实例),它保存了连接数据库相关的所有信息。
// 它内部维护着一个多个底层连接的连接池,它可以安全地被多个 goroutine 同时使用。
var db *sql.DB
// initMySQL 初始化 MySQL 数据库,返回 nil 则初始化成功,否则返回 error
func initMySQL() (err error) {
// DSN: Data Source Name
//dsn := "user:passsword@tcp(127.0.0.1:3306)/dbname"
dsn := "root:@tcp(127.0.0.1:3306)/sql2"
// 初始化全局的 db 对象,而不是新声明一个 db 变量
db, err = sql.Open("mysql", dsn)
if err != nil {
panic(err)
}
// 数值需要业务具体情况来确定
db.SetConnMaxLifetime(time.Second * 10) // 它设置了连接可重用的最大时间长度
db.SetMaxIdleConns(200) // 最大连接数
db.SetMaxOpenConns(10) // 最大空闲连接数
// 尝试与数据库建立连接(校验dsn是否正确)
err = db.Ping()
return
}
func main() {
// 连接 MySQL 数据库
if err := initMySQL(); err != nil {
fmt.Println("connect to db failed,", err)
//return
} else {
fmt.Println("connect to db success!")
}
// Close() 用来释放数据库连接相关的资源
defer db.Close() // 写在err 判断的下面
}
最后更新于
这有帮助吗?