golang官方並沒有提供yaml解析包,所以需要使用第三方包。可用的第三方包有不少,這裡選擇的是
這個包提供的函式還是很少了,這真是一件好事(〃∀〃)
如果你不了解yaml,檢視yaml簡要入門
func marshal(in inte***ce{}) (out byte, err error)將提供的物件解析為yaml文件格式。
但要注意這裡返回不是string型別
func unmarshal(in byte, out inte***ce{}) (err error)解析給定的位元組切片,儲存在第二引數中。你必須保證儲存型別可以接受被解析的資料,否則yaml.typeerror將被返回
讓我們來看一下這個例子:
package main
import (
"fmt"
"gopkg.in/yaml.v2"
func main()
//a不會獲得值,說明 結構欄位名首字母大小控制是否接受值,首字母大寫為接受
//b和b都沒有獲得值,未設定鍵時,預設解析時會將struct中字段的首字母轉為小寫,再去匹配yaml,
//這樣就沒有能與yaml中b想匹配的了
//c 不能獲得值說明,對應層次的字段才會賦值
//開心與d的例子,顯示如何使用中文作為鍵
//x可以獲得值說明,解析與宣告的順序無關
fmt.println(t)
type t struct ) (err error)
unmarshalstrict和unmarshal基本上一樣,但是多了一點限制。
yaml中的字段必須要有給定的接收物件,而在unmarshal中它們會被忽略。
type decoderdecoder從輸入流中讀取和解析yaml值
func newdecoder(r io.reader) *decoder使用r建立decoder
func (dec *decoder) decode(v inte***ce{}) (err error)從yaml中解析v的值
package main
import (
"fmt"
"os"
"gopkg.in/yaml.v2"
type structa struct ) (err error)編碼v並寫入流,如果多次呼叫,每次存入的yaml以---分隔
package main
import (
"log"
"os"
"gopkg.in/yaml.v2"
type structa struct {
a string `yaml:"a"`
type structb struct {
structa
c structa
b string `yaml:"b"`
var data = `
a: a string from struct a
b: a string from struct b
c:a: a string from c.a
func main() {
var b structb
x := 22
err := yaml.unmarshal(byte(data), &b)
if err != nil {
log.fatalf("cannot unmarshal data: %v", err)
yfile, _ := os.create("test.yaml")
defer yfile.close()
yencoder := yaml.newencoder(yfile)
defer yencoder.close()
yencoder.encode(b)
yencoder.encode(b)
yencoder.encode(x)
yencoder.encode(44)
這篇文章根據官方文件寫成,我可能沒有表述的很清楚,請查閱官方文件
go 寫入yaml Go語言解析YAML
本篇解析yaml,是為了使用go搭建乙個基於markdown的部落格系統,當做乙個專案。1 概述 yaml是 yaml ain t a markup language yaml不是一種置標語言 的遞迴縮寫。yaml 以資料為中心,使用空白,縮排,分行組織資料,從而使得表示更加簡潔易讀。乙個典型的 y...
Go 讀取和寫入xml檔案示例
在學習go語言中,有關於go處理xml檔案的處理.在這裡記錄一下 在go語言中使用ioutil庫進行檔案的處理是特別方便的事情,這裡使用goland進行開發的示例 首先建立工程xml 如下圖所示 在main.go中對a.xml 的內容進行讀取 a.xml 的內容如下 zh 深圳寶安 yq 深圳福田 ...
13 go檔案讀取 和 寫入
01 golang開啟檔案讀出一塊檔案資料,但是資料讀不全 讀取思路 開啟檔案獲取操作控制代碼 讀入一段資料列印 defer 開啟檔案控制代碼之後,立即定義關閉函式 不論是 os.open 還是 file.read 函式。返回的都有err,需要對err判斷是否被開啟 對err判斷是否讀取完畢 fun...