44 lines
1.1 KiB
Go
44 lines
1.1 KiB
Go
package conf
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/fsnotify/fsnotify"
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
type Config struct {
|
|
Server ServerConfig `mapstructure:"server" yaml:"server"`
|
|
Database DatabaseConfig `mapstructure:"database" yaml:"database"`
|
|
Logger LoggerConfig `mapstructure:"logger" yaml:"logger"`
|
|
Jwt JwtConfig `mapstructure:"jwt" yaml:"jwt"`
|
|
Redis RedisConfig `mapstructure:"redis" yaml:"redis"`
|
|
}
|
|
|
|
// LoadConfig 读取并解析配置文件
|
|
func LoadConfig(path string) (*Config, error) {
|
|
v := viper.New()
|
|
v.SetConfigFile(path)
|
|
if err := v.ReadInConfig(); err != nil {
|
|
return nil, fmt.Errorf("读取配置文件失败: %w", err)
|
|
}
|
|
|
|
cfg := &Config{}
|
|
if err := v.Unmarshal(cfg); err != nil {
|
|
return nil, fmt.Errorf("解析配置文件失败: %w", err)
|
|
}
|
|
|
|
// 监听配置变更
|
|
v.WatchConfig()
|
|
v.OnConfigChange(func(e fsnotify.Event) {
|
|
fmt.Printf("配置文件已更新: %s\n", e.Name)
|
|
if err := v.Unmarshal(cfg); err != nil {
|
|
fmt.Printf("重载配置文件失败: %s\n", err)
|
|
} else {
|
|
fmt.Println("🚀 配置热重载成功,新配置已即时生效!")
|
|
}
|
|
})
|
|
|
|
return cfg, nil
|
|
}
|