• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    golang解析yaml文件操作

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

    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 yaml
    func 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:10000
    startsendtime: 2017-01-02 08:08:08
    sendmaxcountperday: 100
    devices:
    - 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: boolean
    warnfrequency: 10
    sendfrequency: 10

    3.编写测试类

    package main
    import (
      "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使用zlib压缩和解压缩字符串
    • 利用golang的字符串解决leetcode翻转字符串里的单词
    • Golang获取目录下的文件及目录信息操作
    • 对Golang中的runtime.Caller使用说明
    • 如何判断Golang接口是否实现的操作
    • 浅谈golang中的&^位清空操作
    • Golang压缩Jpeg图片和PNG图片的操作
    上一篇:Golang获取目录下的文件及目录信息操作
    下一篇:利用golang的字符串解决leetcode翻转字符串里的单词
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    golang解析yaml文件操作 golang,解析,yaml,文件,操作,