go解析yaml檔案示例

2021-10-06 05:43:41 字數 2584 閱讀 2680

yaml檔案已經成為配置的一種主要格式,因此各種語言都提供了相應的解析類庫, 本文就以go語言中常用的yaml解析庫 gopkg.in/yaml為例,簡單展示一下如何解析yaml檔案

具體**在這裡:

1, 直接將yaml檔案內容解析為我們定義好的struct, 這種簡單方便,想獲取對應值,可以直接獲取。

2, 將yaml檔案解析為map[string] inte***ce{}, 然後根據需要層層解析, 主要優點不需要提前定義yaml檔案的struct,可以隨時更改yaml檔案格式。

:name

cache

:enable

:false

list

:[redis, memcache]

mysql

:user

: root

password

: mypassword

host

: 192.168.2.5

port

:3306

dbname

: db1

解析**

package main

import

("fmt"

"io/ioutil"

"log"

yaml "gopkg.in/yaml.v2"

)func

main()

err = yaml.

unmarshal

(yamlfile, conf)

if err !=

nil log.

println

("conf"

, conf)

log.

printf

("mysqlhost:%s, port:%d, cachelist:%s"

, conf.mysql.host, conf.mysql.port, conf.cache.list)

configmap :=

make

(map

[string

]inte***ce

) err = yaml.

unmarshal

(yamlfile, configmap)

if err !=

nilfor k,v :=

range configmap

else

if isint32

else

if isbool

else

} fmt.

printf

("---遍歷結束---\n"

)// 使用map表示已經提前知道結構是什麼樣的, 可以將map提取為自己想要的格式

mysqlvalueinte***ce := configmap[

"mysql"

] mysqlvalue, ok := mysqlvalueinte***ce.

(inte***ce

)if ok

]inte***ce

)if ok

else

}else

log.

printf

("---程式結束---\n"

)}

定義的struct

package main

// yaml struct of yaml

type yaml struct

mysql struct

cache struct

}

---

start---

cache:

enable : false

list : [redis, memcache]

mysql:

user : root

password : mypassword

host : 192.168.2.5

port : 3306

dbname : db1

2020/05/17 12:39:29 conf &

}2020/05/17 12:39:29 mysqlhost:192.168.2.5, port:3306, cachelist:[redis memcache]

key:cache, value:map[enable:%!s(bool=false) list:[redis memcache]]

key:mysql, value:map[dbname:db1 host:192.168.2.5 password:mypassword port:%!s(int=3306) user:root]

---遍歷結束--

-2020/05/17 12:39:29 map解析結果。 mysqlhost:192.168.2.5, port:3306

2020/05/17 12:39:29 --

-程式結束--

-process exiting with code: 0

備註:go 語言還有其他yaml解析庫, 例如github.com/go-yaml/yaml、 sigs.k8s.io/yaml, 我們在 可以發現很多,每種基本都提供了example**。 例如, 本文就參考了

yaml檔案編寫示例及解析

apiversion v1 kind service metadata name hello service spec type nodeport selector port protocol tcp port 80 targetport 8080 nodeport 30008apiversion ...

go語言解析yaml

關於yaml語法網路上的資料非常多,不做特別整理。個人理解yaml主要是切片 map等資料結構的一種比較容易解讀的格式。go get gopkg.in yaml.v2hostname sunny addr 127.0.0.1 logs name business logpath home work ...

yaml陣列解析 解析動態Yaml檔案

我有乙個yaml檔案,當前寫為 keys key secret dog values username shiba password inu key secret cat values dbhost localhost words meow 但是,此yaml檔案經常更改,因此每次可以使用不同的值新增...