package config import ( "fmt" "os" "sync" "gopkg.in/yaml.v3" ) type ServerConfig struct { UDPPort int `yaml:"udp_port"` } type DatabaseConfig struct { Host string `yaml:"host"` Port int `yaml:"port"` User string `yaml:"user"` Password string `yaml:"password"` DBName string `yaml:"dbname"` SSLMode string `yaml:"sslmode"` } type Config struct { Server ServerConfig `yaml:"server"` Database DatabaseConfig `yaml:"database"` } var ( instance *Config once sync.Once ) func GetConfig() *Config { once.Do(func() { instance = &Config{} err := instance.loadConfig() if err != nil { panic(fmt.Sprintf("加载配置文件失败: %v", err)) } }) return instance } func (c *Config) loadConfig() error { data, err := os.ReadFile("config.yaml") if err != nil { return fmt.Errorf("读取配置文件失败: %v", err) } err = yaml.Unmarshal(data, c) if err != nil { return fmt.Errorf("解析配置文件失败: %v", err) } return nil }