Go でインターフェイスを使用したさまざまな型のメソッドの実装
Go では、インターフェイスは、さまざまな型で使用できるメソッドのセットを定義するメカニズムを提供します。埋め込む。これにより、異なる型が共通の操作セットを共有できる多態性の動作が可能になります。
問題ステートメント
必要な 2 つの構造体 First と Second があるとします。 PrintStr() というメソッドを定義するインターフェイス A を実装します。各構造体には str という名前の文字列フィールドがあります。ただし、PrintStr() メソッドを両方の構造体に個別に実装すると、冗長になります。
提案された解決策
次の単一の実装が可能であると考える人もいるかもしれません。両方の構造体に対して PrintStr() を A インターフェイス自体で定義します。ただし、インターフェイスはデータを運ばないため、このアプローチは機能しません。
埋め込みと実装
インターフェイス上に単一の実装を作成する代わりに、基本型である WithString を First と Second の両方に埋め込みます。 WithString 型には str フィールドがあり、PrintStr() メソッドが実装されます。 WithString を埋め込むことにより、First と Second の両方が間接的に str フィールドと PrintStr() 実装を取得します。これにより、最小限の重複で A インターフェイスを実装できます。
コード例
type WithString struct { str string } type First struct { WithString } type Second struct { WithString } type A interface { PrintStr() //print First.str or Second.str } func (w WithString) PrintStr() { fmt.Print(w.str) }
使用法
a := First{ WithString: WithString{ str: "foo", }, }
このアプローチにより、コードの重複を避けながら、さまざまな型に共通のメソッドを実装できます。
以上がGo のインターフェイスを使用して、コードを重複させずにさまざまな型のメソッドを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。