如何从Yaml解组嵌入式结构

时间:2018-12-07 08:50:29

标签: go yaml unmarshalling

我想主要针对DRY使用嵌入式结构来解组yaml:

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进行封送处理?

1 个答案:

答案 0 :(得分:4)

您应该添加内嵌标记,例如:

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

这将输出:

--- dump:
name: john
number: one

Here关于它的讨论

希望获得帮助