golang解析yaml文件操作

【字号: 日期:2022-08-20浏览:32作者:雯心

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

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: 103.编写测试类

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

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

标签: Golang
相关文章: