2016-12-13 16 views
-1

以下のデータ構造を持っています。ネストされた初期化を使用せずに初期化する必要があります。このデータ構造はフラッシュされ、後でjsonファイルを出力します。私はAttack_resources []スライスへの型struct2の変数を追加しようとすると、ゴランの次の構造体の構造体を初期化する方法

type GeneratePlan struct{ 
    Mode string `json:"mode"` 
    Name string `json:"name"` 
    Schema string `json:"schema"` 
    Version string `json:"version"` 
    Attack_plans []struct1 `json:"attack-plans"` 

} 

type struct1 struct { 
    Attack_plan Attack_plan `json:"attack-plan"` 
} 


type Attack_plan struct{ 
    Attack_resouces []struct2 `json:"attack-resources"` 
} 

type struct2 struct { 
    Attack_resource Attack_resource `json:"attack-resource"` 
} 

問題があり、それは我々が新規または任意のPTRを使用せずに、構造体を初期化するにはどうすればよい

cannot use struct2 (type *structs.Struct2) as type structs.Struct2 in append 

としてエラーが発生します?として、私たちは、標準の構造体の初期化手法のいずれかを使用する場合、上記のエラーが発生します。 上記のデータ構造を変更して別の構造体へのポインタを保持させると、値が正しく格納されません。私はゴランにとって非常に新しいです。どんな助けもありがとうございます。前もって感謝します!

+1

将来、実際に失敗したコードを投稿してください。エラーメッセージもコードサンプルと一致しません。 問題は、構造体のスライスにポインタ値を追加していることです。スライス定義を '[*] Struct2'に変更するか、' x.Attack_resources = append(x.Attack_resources、* struct2) 'のようにポインタを逆参照してください。 snake_caseは一般的にgoでは推奨されません。 – nothingmuch

答えて

0

あなたが使用して構造体の値を初期化することができます:あなたは構造体のポインタを持っており、基本的な値が必要な場合

resource := struct2{} 

@nothingmuchが指摘したように、あなたはポインタデリファレンス使用することができます

deref := *resource 
+0

解決策は私に進むためのヒントを与えました。ありがとう、トン! – Aishwarya

関連する問題