【发布时间】:2019-10-17 11:12:02
【问题描述】:
我正在尝试学习使用 YAML v3 解组,并具有对复杂嵌入式结构中节点的完全访问权限。
The announcement 帖子解释了如何使用 yaml.Node,但没有给出一个严肃的例子。并且documentation 也没有显示使用节点。主要目的似乎是在 YAML 文件中出色地保存 cmets。
例如,使用公告文章的扩展,我有
package main
import(
"fmt"
"gopkg.in/yaml.v3"
"os"
)
func main() {
type Person struct {
Name string
Address yaml.Node
}
data := `
name: John Doe
address:
street: 123 E 3rd St # street is like an avenue
city: Denver # A city might be a town as well
state: CO # A state might be a province or administrative unit
zip: 81526 # zip might be "postal_code"
`
var person Person
err := yaml.Unmarshal([]byte(data), &person)
if (err != nil) {
fmt.Printf("Failed to unmarshall: %v", err)
os.Exit(1)
}
fmt.Printf("Marshalled person=%v", person)
}
但如果我尝试使用地址项,我会发现它们每个都列为节点内的内容数组;那里没有实际有用的信息。 cmets 在那里,但不清楚它们与什么相关联。
Modify existing yaml file and add new data and comments 也处理相同的区域,但在解组到结构后不显示导航结构。
如何在解组后导航“地址”节点,并在再次编组时保留 cmets?
【问题讨论】: