ホームページ  >  記事  >  バックエンド開発  >  Go 構造体で匿名フィールドはどのように機能しますか?

Go 構造体で匿名フィールドはどのように機能しますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-14 22:22:02621ブラウズ

How do Anonymous Fields Work in Go Structs?

Go 構造体の匿名フィールド

Go では、構造体に匿名フィールド (明示的な名前のないフィールド) を含めることができます。これらのフィールドを使用すると、別の構造体または型を現在の構造体に埋め込むことができ、明示的にリストすることなく、埋め込まれた型のフィールドにアクセスできるようになります。

匿名フィールドの目的

匿名フィールドにはいくつかの目的があります:

  • 型の埋め込み: 匿名フィールドを使用すると、ある型のフィールドを別の型に埋め込むことができ、コードの重複が減り、複雑なデータの操作が容易になります。構造体。
  • プロモーション: 最初の匿名フィールドは「プロモートされたフィールド」として知られています。そのフィールドは親構造体で宣言されているかのように動作するため、親構造体で直接アクセスできます。

匿名フィールドへのアクセス

名前付きフィールドにアクセスするのと同じ方法で、匿名フィールドにアクセスできます。プロモートされたフィールドには、親構造体のフィールド名を使用して直接アクセスできます。他の匿名フィールドには、埋め込み型のフィールド名を使用してアクセスできます。

次のコードを考えてみましょう:

package main

import "fmt"

type Widget struct {
    name string
}

type WrappedWidget struct {
    Widget  // Promoted field
    Time time.Time
    Price int64
}

func main() {
    widget := Widget{"my widget"}
    wrappedWidget := WrappedWidget{widget, time.Now(), 1234}

    fmt.Printf("Widget named %s, created at %s, has price %d\n",
        wrappedWidget.name,  // Accessing the promoted field
        wrappedWidget.Time,  // Accessing an anonymous field
        wrappedWidget.Price) // Accessing a normal field
}

出力:

Widget named my widget, created at 2009-11-10 23:00:00 +0000 UTC m=+0.000000001, has price 1234

この例では、WrappedWidget は Widget 構造体を埋め込み、その name フィールドをプロモートします。その結果、WrappedWidget インスタンスの名前フィールドに直接アクセスできるようになります。

以上がGo 構造体で匿名フィールドはどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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