「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Go での構造体の埋め込み: ポインタか値か?いつどちらを使用するか?

Go での構造体の埋め込み: ポインタか値か?いつどちらを使用するか?

2024 年 11 月 17 日に公開
ブラウズ:437

Embedding Structs in Go: Pointer or Value? When to Use Which?

Go での構造体の埋め込み: ポインターを使用する場合

ある構造体を別の構造体内に埋め込むことを検討する場合、ポインターを使用するかどうかの決定または、埋め込みフィールドの値が発生します。この記事では、この実装の選択の微妙な違いを検討し、潜在的な利点と影響を説明する例を示します。

ポインターによる埋め込み

Go 仕様では、構造体をポインターとして埋め込むことができます。または価値観。非インターフェイス型の場合、匿名フィールドを型名 T または非インターフェイス型名 *T へのポインターとして指定することができます。

ポインターによる埋め込みの利点:

]
  • このアプローチでは、初期化目的で構造体をポインターで返す関数に依存することができます。
  • 動的に拡張中のインスタンスを変更することは可能です。この機能は、複数のインスタンスが同じ基礎となるデータ構造を共有する Flyweight パターンの実装に特に役立ちます。

値による埋め込み

構造体を構造体として埋め込むvalue には、インスタンス化の知識がなくても、すべての機能が埋め込まれています。これは、埋め込まれた構造体のメソッドを、それを囲んでいる構造体に効果的にプロモートします。

次の例を考えてみましょう。

type Job struct {
    Command string
    *log.Logger
}

この例では、Job 構造体に log.Logger 型へのポインターが埋め込まれています。このアプローチにより、ジョブ構造体が Logger メソッドにアクセスできると同時に、さまざまな Logger インスタンスを動的に割り当てることができるようになります。

type Job struct {
    Command string
    log.Logger
}

ここでは、Job 構造体に log.Logger 型を値として直接埋め込みます。昇格された Logger メソッドは、ジョブ構造体から直接アクセスできるようになりました。

結論

ポインターによる埋め込みと値による埋め込みには、どちらも独自の利点と考慮事項があります。 2 つのアプローチのどちらを選択するかは、動的割り当てまたはメソッドのプロモーションが必要かどうかによって決まります。各メソッドの意味を理解すると、Go に構造体を埋め込むときに情報に基づいた意思決定を行うのに役立ちます。

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

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

Copyright© 2022 湘ICP备2022001581号-3