「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Go で構造体を変換する方法: 埋め込み、手動コピー、または明示的な変換?

Go で構造体を変換する方法: 埋め込み、手動コピー、または明示的な変換?

2024 年 11 月 9 日に公開
ブラウズ:695

How to Convert a Struct in Go: Embedding, Manual Copying, or Explicit Conversion?

Go での構造体の変換

次の 2 つの構造体を考えてみましょう。

type A struct {
    a int
    b string
}

type B struct {
    A
    c string
}

型 A の変数があり、それを型 B に変換したいとします。これは Go で可能ですか、それとも手動でフィールドをコピーするか、明示的な変換メソッドを作成する必要がありますか?

方法 1: 埋め込み構造体の割り当て

質問で述べたように、埋め込みはこの目的に利用できます。 A を B に埋め込むと、埋め込みフィールドに代入するだけで、型 A の変数を型 B に変換できます。例:

func main() {
    structA := A{a: 42, b: "foo"}
    structB := B{A: structA} // Embed structA into structB
}

この方法では、埋め込みフィールドに A からのデータを含む B の新しいインスタンスが作成されます。

方法 2: 手動フィールド コピー

あるいは、次のようにフィールドを A から B に手動でコピーすることもできます。

func main() {
    structA := A{a: 42, b: "foo"}
    structB := B{
        A: structA, // Copy fields from structA
        c: "bar",
    }
}

この方法では、B の新しいインスタンスを作成し、A からフィールドを手動で割り当てます。

方法 3: 明示的な変換方法

別のオプションA を B に変換する明示的な変換メソッドを作成することです。これは、複雑な変換ロジックがある場合に便利です。ただし、上記の方法は目的の変換を達成する簡単な方法を提供するため、この場合はこのアプローチは必要ありません。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3