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檔案經常更改,因此每次可以使用不同的值新增...