如何从Yaml解组嵌入式结构

and*_*dig 2 yaml go unmarshalling

我想使用嵌入式结构将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()
}
Run Code Online (Sandbox Code Playgroud)

结果是:

--- dump:
person:
  name: ""
number: one
Run Code Online (Sandbox Code Playgroud)

嵌入的人如何解组?

Mat*_*teo 5

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

type Employee struct {
    Person `yaml:",inline"`
    Number string
}
Run Code Online (Sandbox Code Playgroud)

这将输出:

--- dump:
name: john
number: one
Run Code Online (Sandbox Code Playgroud)

这里是关于它的讨论

希望有帮助