すべては、継承を超えた構成に関するものです。 「あなたは、あなたと同じようにそれらを初期化することができます
type name struct {
Name string `json:"name"`
}
type desc struct {
Description string `json:"description"`
}
:悲しいことに、あなたは匿名構造体を使用していますが、はっきりとそれらをマーシャリングJSONしようとしていることを考えるとしている、あなたはタイプとしてそれらを定義する方がよいでしょう現在行って再度、代わりstruct{<fields>}{init}
、あなたはちょうどあなたが書面で好き
a := name{"foo"}
b := desc{"Description"}
あなたはその後、どのような方法でそれらを組み合わせることができ書きます:
c := struct {
name
description
}{a, b}
一つの癖(つまり、Yをトリップかもしれませんあなたが最初にメンバーを初期化する方法です)。あなたはこのようにそれを初期化することはできません
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
}
アンのインライン複合体は、既存のオブジェクト(CF c := struct{}{a, b}
)を使用して構築され、すでにこれを行います。あなたがやろうとしている内容に応じて、時々このような何かを書くことが容易である
:
func (s *MyCompositeType) CopyName(n name) {
s.Name = n.Name
//copy other fields
}
あなたはいくつかのレベルが深い複合型を入れ子にしているとき、それは人生が容易になります。
を、 a.Name、b.Description) '?いくつかのこと**は**いくつかのコーディングを必要とします。 – Volker