u
This commit is contained in:
1 parent
200f72eb86
commit
91ae4cb474
19 files changed
+650
-148
No files matched your search
@@ -0,0 +1,62 @@
|
||||
package database
|
||||
|
||||
import (
|
||||
"base-go-v2/internal/config"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
_ "github.com/lib/pq"
|
||||
)
|
||||
|
||||
var DB *sql.DB
|
||||
|
||||
var defaultPoolConfig = struct {
|
||||
MaxOpenConns int
|
||||
MaxIdleConns int
|
||||
ConnMaxLifetime time.Duration
|
||||
}{
|
||||
MaxOpenConns: 10,
|
||||
MaxIdleConns: 5,
|
||||
ConnMaxLifetime: 30 * time.Minute,
|
||||
}
|
||||
|
||||
func InitDb() error {
|
||||
d := config.Db
|
||||
|
||||
// 构造 DSN
|
||||
dsn := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable",
|
||||
d.Host, d.Port, d.User, d.Password, d.Dbname)
|
||||
|
||||
db, err := sql.Open("postgres", dsn)
|
||||
if err != nil {
|
||||
return fmt.Errorf("打开数据库失败: %w", err)
|
||||
}
|
||||
|
||||
// 设置连接池(使用默认值,如果用户没传)
|
||||
maxOpenConns := d.MaxOpenConns
|
||||
if maxOpenConns == 0 {
|
||||
maxOpenConns = defaultPoolConfig.MaxOpenConns
|
||||
}
|
||||
db.SetMaxOpenConns(maxOpenConns)
|
||||
|
||||
maxIdleConns := d.MaxIdleConns
|
||||
if maxIdleConns == 0 {
|
||||
maxIdleConns = defaultPoolConfig.MaxIdleConns
|
||||
}
|
||||
db.SetMaxIdleConns(maxIdleConns)
|
||||
|
||||
connMaxLifetime := d.ConnMaxLifetime
|
||||
if connMaxLifetime == 0 {
|
||||
connMaxLifetime = defaultPoolConfig.ConnMaxLifetime
|
||||
}
|
||||
db.SetConnMaxLifetime(connMaxLifetime)
|
||||
|
||||
// 测试连接
|
||||
if err := db.Ping(); err != nil {
|
||||
return fmt.Errorf("数据库连接测试失败: %w", err)
|
||||
}
|
||||
|
||||
DB = db
|
||||
return nil
|
||||
}
|
||||
Reference in new issue
Block a user