ホームページ  >  記事  >  バックエンド開発  >  Go で構造体を変換する方法: 埋め込み、手動コピー、または明示的な変換?

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

Susan Sarandon
Susan Sarandonオリジナル
2024-10-29 01:40:02666ブラウズ

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: 明示的な変換メソッド

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

以上がGo で構造体を変換する方法: 埋め込み、手動コピー、または明示的な変換?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。