ホームページ > バックエンド開発 > Golang > データ フィールドを直接定義せずに Go インターフェイスでデータを表現するにはどうすればよいですか?

データ フィールドを直接定義せずに Go インターフェイスでデータを表現するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-18 13:19:21
オリジナル
124 人が閲覧しました

How Can I Represent Data in Go Interfaces Without Directly Defining Data Fields?

データのない Go インターフェイス

Go では、インターフェイスは機能を定義しますが、データは定義しません。これは、インターフェイスを実装する構造で必要となるフィールドをインターフェイスに指定できないことを意味します。その結果、Go のインターフェイスは主に動作を表すために使用され、データ表現を目的としたものではありません。

データ表現に埋め込み構造を使用する

ただし、可能です。埋め込み構造体を使用してインターフェイス内のデータ表現をシミュレートします。必要なデータ フィールドを含む構造体をインターフェイス インプリメンターに埋め込むことで、インターフェイスを通じて間接的にデータを公開できます。

埋め込み構造体を使用した例

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

type PersonProvider interface {
    GetPerson() *Person
}

type Person struct {
    Name string
    Age  int64
}

func (p *Person) GetPerson() *Person {
    return p
}
ログイン後にコピー

ここでは、任意のオブジェクトを表すインターフェイス PersonProvider を定義します。人の値を提供できる。 Person 構造体は実際のデータ フィールドを保持します。 Person を PersonProvider の実装者に埋め込むことにより、インターフェースを通じてそのデータに間接的にアクセスできます。

埋め込み構造体の長所と短所

埋め込み構造体を使用すると、次の利点があります。 :

  • への直接アクセスを許可します。データ
  • コンパイル時に型の互換性をチェックします
  • インプリメンタ内でデータをカプセル化します

ただし、次のような制限もあります。

  • 直接データアクセスの可能性を明らかにします
  • 必ずしも必要ではない可能性がありますケース
  • 実装の変更に対する将来の影響を慎重に考慮する必要があります

代替アプローチ

インターフェイスを介してデータを表現する代替アプローチは、次のとおりです。データへのアクセスと変更にはメソッドを明示的に使用します。このアプローチにより、より優れた制御と柔軟性が提供されますが、より多くの定型コードが必要になる場合があります。

規約と柔軟性

埋め込み構造体の使用は便利な手法ですが、次のことが重要です。 Go の慣習を考慮し、長所と短所を慎重に比較検討してください。場合によっては、抽象化レイヤーを導入するよりも、データ メンバーを API で直接公開する方が適切な場合があります。

以上がデータ フィールドを直接定義せずに Go インターフェイスでデータを表現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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