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 }