config.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package config
  2. import (
  3. "fmt"
  4. "os"
  5. "time"
  6. "gopkg.in/yaml.v3"
  7. )
  8. type Config struct {
  9. Server struct {
  10. Port string `yaml:"port"`
  11. WebLog bool `yaml:"web_log"`
  12. } `yaml:"server"`
  13. JWT struct {
  14. SecretKey string `yaml:"secret_key"`
  15. AccessTokenExp time.Duration `yaml:"access_token_exp"` // 纳秒为单位
  16. RefreshTokenExp time.Duration `yaml:"refresh_token_exp"` // 纳秒为单位
  17. } `yaml:"jwt"`
  18. Redis struct {
  19. Addr string `yaml:"addr"`
  20. Password string `yaml:"password"`
  21. DB int `yaml:"db"`
  22. } `yaml:"redis"`
  23. Database struct {
  24. Host string `yaml:"host"`
  25. Port int `yaml:"port"`
  26. User string `yaml:"user"`
  27. Password string `yaml:"password"`
  28. Name string `yaml:"name"`
  29. Log bool `yaml:"log"`
  30. } `yaml:"database"`
  31. Minio struct {
  32. Addr string `yaml:"addr"`
  33. User string `yaml:"user"`
  34. Password string `yaml:"password"`
  35. UseSSL bool `yaml:"usessl"`
  36. } `yaml:"minio"`
  37. }
  38. // Load 从配置文件和环境变量加载配置
  39. func Load(configPath string) (*Config, error) {
  40. cfg := &Config{}
  41. // 如果提供了配置文件路径,则从文件读取
  42. if configPath != "" {
  43. data, err := os.ReadFile(configPath)
  44. if err != nil {
  45. return nil, fmt.Errorf("读取配置文件失败: %w", err)
  46. }
  47. if err := yaml.Unmarshal(data, cfg); err != nil {
  48. return nil, fmt.Errorf("解析配置文件失败: %w", err)
  49. }
  50. }
  51. return cfg, nil
  52. }