golang解析yaml文件操作

时间:2021-05-22

首先安装解析的第三方包:

go get gopkg.in/yaml.v2

示例:

package main import ( "os" "log" "fmt" "encoding/json" "gopkg.in/yaml.v2") type Config struct { Test Test `yaml:"test"`} type Test struct { User []string `yaml:"user"` MQTT MQ `yaml:"mqtt"` Http HTTP `yaml:"http"`} type HTTP struct { Port string `yaml:"port"` Host string `yaml:"host"`} type MQ struct { Host string `yaml:"host"` Username string `yaml:"username"` Password string `yaml:"password"`} //read yaml config//注:path为yaml或yml文件的路径func ReadYamlConfig(path string) (*Config,error){ conf := &Config{} if f, err := os.Open(path); err != nil { return nil,err } else { yaml.NewDecoder(f).Decode(conf) } return conf,nil} //test yamlfunc main() { conf,err := ReadYamlConfig("D:/test_yaml/test.yaml") if err != nil { log.Fatal(err) } byts,err := json.Marshal(conf) if err != nil { log.Fatal(err) } fmt.Println(string(byts))}

test.yaml内容如下:

test: user: - Tom - Lily - Skay mqtt: host: localhost:1883 username: test password: test http: {port: "8080", host: "127.0.0.1"}

运行结果:

{"Test":{"User":["Tom","Lily","Skay"],"MQTT":{"Host":"localhost:1883","Username":"test","Password":"test"},"Http":{"Port":"8080","Host":"127.0.0.1"}}}

补充:golang 读取yml格式,多结构体级联

1.安装yml解析包

进入到gopath下执行命令

go get gopkg.in/yaml.v2

源码地址https://github.com/go-yaml/yaml

2.设置配置文件config.yml

ipport: 192.168.2.95:10000startsendtime: 2017-01-02 08:08:08sendmaxcountperday: 100devices:- devid: 123456789 nodes: - pkid: 0 bkid: 0 index: 0 minvalue: 0 maxvalue: 60 datatype: normal - pkid: 0 bkid: 0 index: 0 datatype: boolean- devid: 10001 nodes: - pkid: 0 bkid: 1 index: 0 datatype: booleanwarnfrequency: 10sendfrequency: 10

3.编写测试类

package mainimport ( "fmt" "gopkg.in/yaml.v2" "io/ioutil")//配置文件中字母要小写,结构体属性首字母要大写type Myconf struct { Ipport string StartSendTime string SendMaxCountPerDay int Devices []Device WarnFrequency int SendFrequency int}type Device struct { DevId string Nodes []Node}type Node struct { PkId string BkId string Index string MinValue float32 MaxValue float32 DataType string}func main() { data, _ := ioutil.ReadFile("config.yml") fmt.Println(string(data)) t := Myconf{} //把yaml形式的字符串解析成struct类型 yaml.Unmarshal(data, &t) fmt.Println("初始数据", t) if(t.Ipport==""){ fmt.Println("配置文件设置错误") return; } d, _ := yaml.Marshal(&t) fmt.Println("看看 :", string(d))}

4.注意

1.配置文件中字母要小写,结构体属性首字母要大写,开发比较快

也可以指定如:yaml:"c",只不过有点麻烦,当然如果重命名必须要指定

2.yaml:",flow"

这个意思是将数组用[“a”,”b”]这样的格式展示,默认展示形式是

- a

- b

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章