Go语言解析YAML

2023-09-13 09:34:26

gopath从零学
要用go,用官方的安装包安装在Home目录下还需要额外的配置
首先安装完go,在文件夹的bin目录下执行go的命令报错:
go: cannot find GOROOT directory: /usr/local/go
需要在~/.bashrc中修改为安装go的地址:
vim ~/.bashrc
插入:
export GOROOT=/home/test/go
PATH=PATH:GOROOT/bin
GOROOT主要是指明go安装包的位置,因为里头有go编译需要的库文件等
下面在/home/test/src中写一个helloworld.go:

package mainimport"fmt"func main() {
    fmt.Println("hello world")
}

然后使用go run:
go run helloworld.go

然后按项目的要求,需要用go语言读取yaml文件。
首先从github上下载解析yaml的源代码包,如果有网的话可以直接使用go get gopkg.in/yaml.v2
但是我们的编译机都是不联网的,所以只能从https://github.com/go-yaml/yaml 下载源代码,解压开来是一个yaml-2的文件夹
我们把yaml-2文件夹放在/home/test/目录下
在helloword.go中加入一行:
import “../yaml-2”
然后就可以使用yaml-2中定义的若干函数了
实际使用时,参考的以下文章:
http://blog.csdn.net/wm5920/article/details/77198153
一个Load一个Marshel就可以将文本转换成一个大的结构体

https://godoc.org/gopkg.in/yaml.v2#Marshal

在上文的例子中,可以看到代码中使用了一个划定好内容的结构体MyConf{}
但实际使用中发现这种结构体的形式无法满足我们的要求,比如我们的yml模板,很多会变化的,比如以rancher的模板为例:

    m :=make(map[interface{}]interface{})if err !=nil {
        fmt.Sprintln("error: %v", err)
    }
    err = yaml.Unmarshal([]byte(data), &m)
    fmt.Println(m)

按照Map直接读取yml文件的全部内容,代码中可以对每一层的map进行处理,每一层都是一个map。这样就不用考虑设计的结构体是否能满足千变万化的yaml配置文件。

  • 作者:EthanCoding
  • 原文链接:https://blog.csdn.net/wylewylie/article/details/78645679
    更新时间:2023-09-13 09:34:26