package config import ( "fmt" "os" "sync" "gopkg.in/yaml.v3" ) type ServerConfig struct { UDPPort int `yaml:"udp_port"` } type Config struct { Server ServerConfig `yaml:"server"` } 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 }