Open函数只是校验参数格式是否正确,不参与数据库连接
db对象可安全的被 goroutine并发使用 , 并维护自己的空闲连接池, 因此Open函数应该只被调用一次, 很少需要关闭db对象
设置数据库连接的最大连接数 , n>0 并小于最大空闲连接数.会将最大空闲连接数减小到匹配最大开启连接数的限制,如果n<=0 ,不会限制最大开启连接数,默认0 func (db *DB) SetMaxOpenConns(n int) 设置连接池中最大空闲连接数,如果n>最大开启连接数,则新的最大闲置连接数会减小到最大开启连接数的限制 ,如果n<=0 ,不会保留最大空闲连接数 func (db *DB) SetMaxIdleConns(n int)
package main
import (
"database/sql"
"fmt"
"github.com/gin-gonic/gin"
_ "github.com/go-sql-driver/mysql"
"net/http"
)
// 定义全局db变量
var db *sql.DB
func main() {
router := gin.Default() // 默认路由
err := initDB()
if err != nil {
fmt.Printf("init db error:%v \n ", err)
} else {
fmt.Println("连接成功db")
}
defer db.Close()
router.Run()
}
func initDB() (err error) {
dsn := "root:root@tcp(127.0.0.1:3306)/fyouku"
// 这里db不要使用:= , 全局变量赋值 , 在main中使用
// 这里不会校验账号密码是否正确
db, err = sql.Open("mysql", dsn)
if err != nil {
return err
}
//尝试数据库连接
err = db.Ping()
if err != nil {
return err
}
db.SetConnMaxLifetime(time.Second*10)//连接存活最大时间
db.SetMaxIdleConns(200) //最大空闲连接数
db.SetMaxOpenConns(10) // 最大连接数
return nil
}