2 回答
TA貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個(gè)贊
您應(yīng)該知道,通過(guò)閱讀評(píng)論,您違反了 YAML 規(guī)范,該規(guī)范明確規(guī)定評(píng)論不得傳達(dá)內(nèi)容信息。
無(wú)論如何,go-yaml v3 提供了yaml.Node中間子結(jié)構(gòu)的類型:
package main
import (
"fmt"
"gopkg.in/yaml.v3"
)
type file struct {
Type string
Description string
Sample yaml.Node
}
var input []byte = []byte(`
type: default
description: test data
sample:
some: # want
complex: # comments
- struct # included
`)
func main() {
var f file
var err error
if err = yaml.Unmarshal(input, &f); err != nil {
panic(err)
}
var out []byte
if out, err = yaml.Marshal(&f.Sample); err != nil {
panic(err)
}
fmt.Println(string(out))
}
這打印
some: # want
complex: # comments
- struct # included
它通過(guò)將結(jié)構(gòu)存儲(chǔ)到 a中來(lái)工作yaml.Node,它確實(shí)存儲(chǔ)了評(píng)論。然后它將節(jié)點(diǎn)呈現(xiàn)為獨(dú)立的 YAML 文檔。
您可以通過(guò)瀏覽節(jié)點(diǎn)結(jié)構(gòu)來(lái)訪問(wèn)評(píng)論。
該字符串與原始字符串不同,因?yàn)?YAML 在加載時(shí)總是會(huì)丟失一些信息。如果您需要以精確間距獲取值,則確實(shí)需要將子樹(shù)編碼為文字塊標(biāo)量,就像您在答案中顯示的那樣。
TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊
我通過(guò)sample在 yaml 中定義為字符串來(lái)修改我的方法:
type: default
description: test data
sample: |
some: # want
complex: # comments
- struct # included
這更像是一種解決方法,但是一個(gè)簡(jiǎn)單的...
- 2 回答
- 0 關(guān)注
- 217 瀏覽
添加回答
舉報(bào)
