Go解析yaml文件

包准备

首先安装解析yaml文件的包

go get gopkg.in/yaml.v2

但是可能会无法安装成功,报错显示go get unrecognized import path "gopkg.in/yaml.v2"
通过下载编译源代码的方式解决:
go/src路径下新建一个文件gopkg.in,将代码下载到go/src/gopkg.in

git config  --global   http.sslVerify "false"
git config --global http.postBuffer 524288000
go env -w GOPROXY=https://goproxy.cn,direct
git clone https://github.com/go-yaml/yaml.git 

或者在https://github.com/go-yaml/yaml上下载zip,解压到该路径下。
之后将yaml的文件名称改为yaml.v2,安装:

cd yaml.v2
go install

main.go

package main
​
import (
    "encoding/json"
    "fmt"
    "gopkg.in/yaml.v2"
    "io/ioutil"
    "log"
    "os"
)//Yaml the yaml file Cluster struct
type Yaml struct {
    Clusters Clusters `yaml:"clusters"`
}
type Clusters struct {
    Services []Services `yaml:"services"`
}
type Services struct {
    Name       string `yaml:"service_name"`
    Ip         string `yaml:"ipaddr"`
    Username   string `yaml:"username"`
    Passwd     string `yaml:"passwd"`
    Ports      []Ports  `yaml:"ports,omitempty"`
}
type  Ports    struct{
Port      string `yaml:"port"`
Protocol  string `yaml:"protocol"`
}func ReadYamlConfig(path string)  (*Yaml,error){
    conf := &Yaml{}
    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("cluster.yaml")if err != nil {
        log.Fatal(err)
    }
    byts,err := json.Marshal(conf)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(string(byts))
​
    cyts,err := yaml.Marshal(conf)
    if err != nil {
        log.Fatal(err)
    }
​
    t := Yaml{}
    err = yaml.Unmarshal([]byte(cyts), &t)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(t)
    //
    cluster := new(Yaml)
    yamlFile, err := ioutil.ReadFile("cluster.yaml")
    if err != nil {
        log.Println(err)
    }
​
    err = yaml.Unmarshal(yamlFile, &cluster)if err != nil {
        log.Println(err)
    }
    fmt.Println(cluster)//log.Println("conf", cluster)
    fmt.Println(cluster.Clusters.Services[1].Ports[0].Port)
}

cluster.yaml

clusters:
  services:
    - service_name: test1
      ipaddr: 192.168.1.12
      username: root
      passwd: zzs
    - service_name: test2
      ipaddr: 192.168.1.13
      username: root
      passwd: eve
      ports:
        - port: 48888
          protocol: TCP

output

{"Clusters":{"Services":[{"Name":"test1","Ip":"192.168.1.12","Username":"root","Passwd":"zzs","Ports":null},{"Name":"test2","Ip":"192.168.1.13","Username":"root","Passwd":"eve","Ports":[{"Port":"48888","Protocol":"TCP"}]}]}}
{{[{test1 192.168.1.12 root zzs []} {test2 192.168.1.13 root eve [{48888 TCP}]}]}}
&{{[{test1 192.168.1.12 root zzs []} {test2 192.168.1.13 root eve [{48888 TCP}]}]}}
48888
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值