package main import ( "github.com/golang/glog" "gopkg.in/yaml.v3" "io/ioutil" ) var PATH = "D:\\EPWork\\goland\\workspace\\golang_learn\\data_func\\go_to_yaml\\config.yaml" func main() { if LoadJd(PATH) == nil { glog.Info("执行简单配置:", DatabaseConfigJd) } if LoadFz(PATH) == nil { glog.Info("执行复杂一配置:", DatabaseConfigFz) } if Load(PATH) == nil { glog.Info("执行复杂二配置:", DatabaseConfigFz) glog.Info("获取值:", DatabaseConfigFz.Mysql.Password) } if LoadMap(PATH) == nil { glog.Info("执行集合-复杂配置:", DatabaseConfigMap) maps := DatabaseConfigMap.Map glog.Info("解析详情444:", &maps) for _, val := range *&maps { glog.Info("解析详情555:", val) m3 := val.(map[string]interface{}) for k, v := range m3 { glog.Info("解析详情666:key=", k, "; value=", v) } } } if LoadMap2(PATH) == nil { glog.Info("执行集合-简化配置:", DatabaseConfigMap2) maps := DatabaseConfigMap2.Map for k, v := range maps { glog.Info("解析详情000:key=", k, "; value=", v) for kk, vv := range v { glog.Info("解析详情---:key=", kk, "; value=", vv) } } } if LoadList(PATH) == nil { glog.Info("执行数组配置:", DatabaseConfigList) list := DatabaseConfigList.List glog.Info("解析详情:", list) } } type ConfigJd struct { Username string `yaml:"username"` Password string `yaml:"password"` } type ConfigFz struct { Redis struct { Address string `yaml:"address"` Password string `yaml:"password"` } Mysql struct { Username string `yaml:"username"` Password string `yaml:"password"` } } type Config struct { Redis Redis `yaml:"redis"` //或者:`yaml:"redis, inline"` Mysql Mysql `yaml:"mysql"` //或者:`yaml:"mysql, inline"` } type Redis struct { Address string `yaml:"address"` Password string `yaml:"password"` } type Mysql struct { Username string `yaml:"username"` Password string `yaml:"password"` } var DatabaseConfigJd *ConfigJd //解析函数 func LoadJd(path string) error { conf := new(ConfigJd) yamlFile, err := ioutil.ReadFile(path) if err != nil { glog.Info("发生异常:", err) return err } err = yaml.Unmarshal(yamlFile, conf) if err != nil { glog.Error("Unmarshal:", err) return err } DatabaseConfigJd = conf return err } var DatabaseConfigFz *ConfigFz //解析函数 func LoadFz(path string) error { conf := new(ConfigFz) yamlFile, err := ioutil.ReadFile(path) if err != nil { glog.Info("发生异常:", err) return err } err = yaml.Unmarshal(yamlFile, conf) if err != nil { glog.Error("Unmarshal:", err) return err } DatabaseConfigFz = conf return err } var DatabaseConfig *Config //解析函数 func Load(path string) error { conf := new(Config) yamlFile, err := ioutil.ReadFile(path) if err != nil { glog.Info("发生异常:", err) return err } err = yaml.Unmarshal(yamlFile, conf) if err != nil { glog.Error("Unmarshal:", err) return err } DatabaseConfig = conf return err } type ConfigMap struct { Map []interface{} `yaml:"map"` } type ConfigMap2 struct { Map []map[string]interface{} `yaml:"map"` } var DatabaseConfigMap *ConfigMap var DatabaseConfigMap2 *ConfigMap2 //解析函数 func LoadMap(path string) error { conf := new(ConfigMap) yamlFile, err := ioutil.ReadFile(path) if err != nil { glog.Info("发生异常:", err) return err } err = yaml.Unmarshal(yamlFile, conf) if err != nil { glog.Error("Unmarshal:", err) return err } DatabaseConfigMap = conf return err } func LoadMap2(path string) error { conf := new(ConfigMap2) yamlFile, err := ioutil.ReadFile(path) if err != nil { glog.Info("发生异常:", err) return err } err = yaml.Unmarshal(yamlFile, conf) if err != nil { glog.Error("Unmarshal:", err) return err } DatabaseConfigMap2 = conf return err } type ConfigList struct { List []string `yaml:"list"` } var DatabaseConfigList *ConfigList //解析函数 func LoadList(path string) interface{} { conf := new(ConfigList) yamlFile, err := ioutil.ReadFile(path) if err != nil { glog.Info("发生异常:", err) return err } err = yaml.Unmarshal(yamlFile, conf) if err != nil { glog.Error("Unmarshal:", err) return err } DatabaseConfigList = conf return err }