Eli*_*gem 7
Go 是关于组合而不是继承。可悲的是,您使用的是匿名结构,但鉴于您显然是在尝试对它们进行 json 编组,最好将它们定义为类型:
type name struct {
Name string `json:"name"`
}
type desc struct {
Description string `json:"description"`
}
struct{}{init}
a := name{"foo"}
b := desc{"Description"}
然后,您可以通过编写以下内容以任何您喜欢的方式组合它们:
c := struct {
name
description
}{a, b}
像这样组合类型时必须习惯的一个怪癖(一开始可能会让你绊倒)是初始化成员的方式。假设您决定创建一个结合其他两个结构的类型:
type foo struct {
name
description
}
你不能像这样初始化它:
o := foo{"Name value", "description value"}
name
o := foo{
name{"Name value"},
description{Description: "Description val"},//optional with field names
}
c := struct{}{a, b}
func (s *MyCompositeType) CopyName(n name) {
s.Name = n.Name
//copy other fields
}
当您将复合类型嵌套到几层深时,它会让生活变得更轻松。