データのない 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 サイトの他の関連記事を参照してください。