Я пытаюсь научиться использовать unamrshaling yaml v3 с полным доступом к узлу в сложной встроенной структуре.
В сообщении объясняется, как использовать yaml.Node, ноне дает серьезного примера.И документы также не показывают работу с узлом.Кажется, что основной целью является отличное сохранение комментариев в файлах yaml.
Например, при работе с расширением статьи анонса у меня есть
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)
}
Но если я попытаюсь использоватьэлементы адреса, я нахожу их перечисленными в виде массива содержимого внутри узла;Там нет никакой полезной информации.Здесь есть комментарии, но неясно, с чем они связаны.
Изменить существующий файл yaml и добавить новые данные и комментарии также имеет дело с той же территорией, но непоказать навигацию по структуре после демаршаллинга в структуру.
Как я могу перемещаться по узлу «Адрес», когда он не маршалируется, и сохранять комментарии к маршаллингу снова?