首页 > 解决方案 > 如何从 yaml 中解组嵌入式结构

问题描述

我想使用嵌入式结构解组 yaml,主要用于 DRY:

package main

import (
    "fmt"
    "log"
    "gopkg.in/yaml.v2"
)

type Person struct {
    Name string
}

type Employee struct {
    Person
    Number string
}

func (c *Employee) Dump() {
    d, err := yaml.Marshal(c)
    if err != nil {
        log.Fatalf("error: %v", err)
    }
    fmt.Printf("--- dump:\n%s\n\n", string(d))
}

func main() {
    s := `
name: john
number: one
`

    c := &Employee{}
    err := yaml.Unmarshal([]byte(s), c)
    if err != nil {
        log.Fatalf("Unmarshal: %v", err)
    }

    c.Dump()
}

这导致:

--- dump:
person:
  name: ""
number: one

嵌入的 Person 如何解组?

标签: goyamlunmarshalling

解决方案


您应该添加内联标签,例如:

type Employee struct {
    Person `yaml:",inline"`
    Number string
}

这将输出:

--- dump:
name: john
number: one

这里有一个关于它的讨论

希望这有帮助


推荐阅读