go 寫入yaml Golang 解析Yaml格式

2021-10-12 15:57:45 字數 1969 閱讀 5679

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...