package utils import ( "context" "fmt" "go-policy-service/config" "time" "github.com/go-redis/redis/v8" "gorm.io/driver/mysql" "gorm.io/gorm" ) var Db *gorm.DB var Rdb *redis.Client func InitDB(cfg *config.Config) error { dsn := getDSN(cfg) conn, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err != nil { return err } Db = conn return nil } func getDSN(cfg *config.Config) string { return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4", cfg.DBUser, cfg.DBPassword, cfg.DBHost, cfg.DBPort, cfg.DBName) } // 初始化 Redis func InitRedis(cfg *config.Config) error { Rdb = redis.NewClient(&redis.Options{ Addr: fmt.Sprintf("%s:%d", cfg.RedisHost, cfg.RedisPort), Password: cfg.RedisPassword, DB: cfg.RedisDB, }) ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() if _, err := Rdb.Ping(ctx).Result(); err != nil { return fmt.Errorf("redis connection failed: %w", err) } return nil }