Go の埋め込みフィールドに対してポインターと値の参照を使用する場合は?

DDD
リリース: 2024-10-30 23:47:29
オリジナル
782 人が閲覧しました

When to Use a Pointer vs. Value Reference for Embedded Fields in Go?

埋め込み: ポインターと値参照を使用する場合

Golang で 1 つの構造を別の構造内に組み込む場合、ポインタまたは値参照。次のコード スニペットを考えてみましょう:

<code class="go">type Job struct {
    Command string
    *log.Logger
}</code>
ログイン後にコピー

この例では、ポインターで表される *log.Logger 型をジョブ構造内に埋め込みました。あるいは、次のように値参照を利用することもできます。

<code class="go">type Job struct {
    Command string
    log.Logger
}</code>
ログイン後にコピー

どちらのアプローチでも埋め込みを実現しますが、その意味は異なります。 Go 仕様によれば、埋め込みフィールドは型自体、または非インターフェイス型へのポインタのいずれかをサポートします。重要なのは、埋め込み型をポインター型にすることはできません。

「ポインターによる埋め込み」として知られるポインターの埋め込みには、特定の利点があります。まず、構造体が初期化されて参照によって返される、NewX パターンに従う関数を利用できるようになります。次に、実行時にさまざまなインスタンスを埋め込み型に動的に割り当てることができます。

たとえば、次のコードを考えてみましょう。

<code class="go">type Bitmap struct{
    data [4][5]bool
}

type Renderer struct{
    *Bitmap //Embed by pointer
    on uint8
    off uint8
}</code>
ログイン後にコピー

この例では、レンダラー タイプは次の方法でビットマップを埋め込みます。参照。これにより、Bitmap の 1 つのインスタンスが、それぞれ独自の文字セットを持つ複数の Renderer インスタンスの埋め込みインスタンスとして機能することができます。このコードの出力は、複数のレンダラーが同じ基礎となるデータ構造上でどのように動作できるかを示しています。

OXXO
OXOO
OXOO
OXOO
.@@.
.@..
.@..
.@..
ログイン後にコピー

対照的に、値参照の埋め込みにはこれらの利点はありません。ただし、メソッドにアクセスするために埋め込み型をインスタンス化する必要はありません。最終的に、ポインターを使用するか値参照を使用するかの決定は、アプリケーションの特定の要件と埋め込みフィールドに必要な動作によって決まります。

以上がGo の埋め込みフィールドに対してポインターと値の参照を使用する場合は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート