Golang インターフェースを使用した異なる型のインターフェース メソッドの実装
Go では、多くの場合、異なる型のデータ構造で同じインターフェースを実装することが望まれます。共通の動作セットを提供します。たとえば、2 つの構造体について考えてみましょう:
type First struct { str string } type Second struct { str string }
両方の構造体にインターフェイス A を実装させたいと考えています:
type A interface { PrintStr() // Print First.str or Second.str }
ただし、各構造体に個別に PrintStr() を実装するのは冗長に思えます:
func (f First) PrintStr() { fmt.Print(f.str) } func (s Second) PrintStr() { fmt.Print(s.str) }
A を実装するすべての構造体に対して単一の実装があることが理想的です。これを直接実行しようとするとは機能しません:
func (a A) PrintStr() { fmt.Print(a.str) }
この理由は、 a に str フィールドがないためです。代わりに、より洗練された解決策には、基本型を作成し、それを 2 つの構造体に埋め込むことが含まれます。
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) }
ここでは、WithString が基本型として機能し、First と Second がそれを埋め込みます。これにより、PrintStr() の集中実装が可能になります。
使用例:
a := First{ WithString: WithString{ str: "foo", }, }
WithString のインスタンスを埋め込むことで First のインスタンスを作成できることに注意してください。この手法により、同じインターフェイスを実装する複数の異なる型を 1 つの実装にするという目標を達成できます。
以上がGolang で異なる型のインターフェイス メソッドを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。