.YAML 是 JSON 的超集,能够表示 JSON 所能表示的任何数据。
server: port: 8080 dbConfig: host: db-host username: admin password: admin_pwd security: sslEnabled: true truststoreLocation: ./keystore truststorePassword: changeit为了解析这个 YAML 文件,我们首先使用 go get gopkg.in/yaml.v3 命令将 YAML 包添加到我们的工作区。接着,我们创建了对应的 Go 结构体来表示配置文件中的各个部分:
// db_config.go type DbConfig struct { Host string `yaml:"host"` UserName string `yaml:"username"` Password string `yaml:"password"` } // security_config.go type SecurityConfig struct { SslEnabled bool `yaml:"sslEnabled"` TruststoreFilePath string `yaml:"truststoreLocation"` TruststorePwd string `yaml:"truststorePassword"` } // server_config.go type ServerConfig struct { Port string `yaml:"port"` }请注意,要解析的属性必须具有公共(Public)可访问性,即变量名应以大写字母开头,因为 YAML 解析器将使用反射包来解析标记和映射值。最后,我们使用 os.ReadFile 读取配置文件,然后使用 YAML API 解析文件内容,并实例化类型:
yamlData, err := os.ReadFile("app_config.yml") if err != nil { log.Fatalf("Error reading YAML file: %v", err) } // 堆代码 duidaima.com // 解析 YAML 内容并实例化类型 var serverConfig ServerConfig err = yaml.Unmarshal(yamlData, &serverConfig) if err != nil { log.Fatalf("Error unmarshaling YAML file: %v", err) } fmt.Println("Loaded Server Config")在这个例子中,yaml.Unmarshal 接受字节格式的 YAML 内容和用于映射值的类型引用。YAML 结构标记(yaml:<property_key>)确保了配置文件中的属性键与 Go 结构体字段之间的正确映射。