Без опису
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package subconfigs
  2. import (
  3. "fmt"
  4. "log"
  5. )
  6. // DbConfig 单个数据库配置(共享结构)
  7. type DbConfig struct {
  8. Type string `yaml:"type" desc:"数据库类型,如:mysql、postgresql"`
  9. Host string `yaml:"host" desc:"数据库主机地址"`
  10. Port int `yaml:"port" desc:"数据库端口"`
  11. Username string `yaml:"username" desc:"数据库用户名"`
  12. Password string `yaml:"password" desc:"数据库密码"`
  13. Database string `yaml:"database" desc:"数据库名称"`
  14. MaxOpenConns int `yaml:"max_open_conns" desc:"最大打开连接数"`
  15. MaxIdleConns int `yaml:"max_idle_conns" desc:"最大空闲连接数"`
  16. ConnMaxLifetime int `yaml:"conn_max_lifetime" desc:"连接最大生命周期(秒)"`
  17. }
  18. // SetDbDefaults 设置数据库配置默认值
  19. func SetDbDefaults(c *DbConfig) {
  20. if c.Port == 0 {
  21. c.Port = 3306
  22. }
  23. if c.MaxOpenConns == 0 {
  24. c.MaxOpenConns = 100
  25. }
  26. if c.MaxIdleConns == 0 {
  27. c.MaxIdleConns = 20
  28. }
  29. if c.ConnMaxLifetime == 0 {
  30. c.ConnMaxLifetime = 3600
  31. }
  32. }
  33. // ValidateDbConfig 验证数据库配置
  34. func ValidateDbConfig(c *DbConfig) error {
  35. if c.Type == "" {
  36. return fmt.Errorf("database type is required")
  37. }
  38. if c.Host == "" {
  39. return fmt.Errorf("database host is required")
  40. }
  41. if c.Port <= 0 || c.Port > 65535 {
  42. return fmt.Errorf("invalid database port: %d", c.Port)
  43. }
  44. if c.Database == "" {
  45. return fmt.Errorf("database name is required")
  46. }
  47. return nil
  48. }
  49. // IsDbConfigured 判断数据库是否已配置
  50. func IsDbConfigured(c *DbConfig, name string) bool {
  51. if c.Host == "" {
  52. if name != "" {
  53. log.Printf("⚠️ 警告: 数据库 '%s' Host 未配置", name)
  54. } else {
  55. log.Println("⚠️ 警告: 数据库 Host 未配置")
  56. }
  57. return false
  58. }
  59. if c.Port <= 0 {
  60. if name != "" {
  61. log.Printf("⚠️ 警告: 数据库 '%s' Port 未配置或无效", name)
  62. } else {
  63. log.Println("⚠️ 警告: 数据库 Port 未配置或无效")
  64. }
  65. return false
  66. }
  67. if c.Username == "" {
  68. if name != "" {
  69. log.Printf("⚠️ 警告: 数据库 '%s' Username 未配置", name)
  70. } else {
  71. log.Println("⚠️ 警告: 数据库 Username 未配置")
  72. }
  73. return false
  74. }
  75. if c.Database == "" {
  76. if name != "" {
  77. log.Printf("⚠️ 警告: 数据库 '%s' 名称未配置", name)
  78. } else {
  79. log.Println("⚠️ 警告: 数据库名称未配置")
  80. }
  81. return false
  82. }
  83. return true
  84. }