package orm import ( "fmt" "log/slog" "proxy-server/server/pkg/env" "errors" "gorm.io/driver/postgres" "gorm.io/gorm" "gorm.io/gorm/logger" ) var DB *gorm.DB func Init() { dsn := fmt.Sprintf( "host=%s port=%d user=%s password=%s dbname=%s sslmode=disable TimeZone=%s", env.DbHost, env.DbPort, env.DbUsername, env.DbPassword, env.DbDatabase, env.DbTimezone, ) db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{ Logger: logger.Default, }) if err != nil { panic(err) } // 配置连接池 sqlDb, err := db.DB() if err != nil { panic(err) } sqlDb.SetMaxIdleConns(10) sqlDb.SetMaxOpenConns(100) DB = db } func InitForTest(dsn string) { db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{ Logger: logger.Default, }) if err != nil { panic(err) } DB = db } func MaySingle[T any](results []T) (*T, error) { rsLen := len(results) if rsLen == 0 { return nil, errors.New("记录为空") } if rsLen > 1 { slog.Warn("记录不唯一", "ids") } return &results[0], nil }