db.go 790 B

12345678910111213141516171819202122232425262728
  1. package infra
  2. import (
  3. "fmt"
  4. "os"
  5. "gorm.io/driver/mysql"
  6. "gorm.io/gorm"
  7. )
  8. // 初始化数据库连接(从环境变量读取配置)
  9. // 需要的环境变量:
  10. // DB_HOST, DB_PORT, DB_USER, DB_PASSWORD, DB_NAME
  11. func NewDB() (*gorm.DB, error) {
  12. host := os.Getenv("DB_HOST")
  13. port := os.Getenv("DB_PORT")
  14. user := os.Getenv("DB_USER")
  15. password := os.Getenv("DB_PASSWORD")
  16. name := os.Getenv("DB_NAME")
  17. // 最小校验,避免使用硬编码默认值
  18. if host == "" || port == "" || user == "" || name == "" {
  19. return nil, fmt.Errorf("database env not set: require DB_HOST, DB_PORT, DB_USER, DB_NAME")
  20. }
  21. dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?parseTime=true&charset=utf8mb4&loc=Local", user, password, host, port, name)
  22. return gorm.Open(mysql.Open(dsn), &gorm.Config{})
  23. }