Go では匿名インターフェイスの実装は可能ですか?
次のインターフェイスと架空のライブラリの関数を考えてみましょう:
type NumOp interface { Binary(int, int) int Ternary(int, int, int) int } func RandomNumOp(op NumOp) { // ... }
このインターフェースを実装するには、型を定義します。例:
type MyAdd struct {} func (MyAdd) Binary(a, b int) int {return a + b } func (MyAdd) Ternary(a, b, c int) int {return a + b + c }
機能実装の必要性
ただし、使い捨てシナリオでは匿名関数を使用してインターフェイスを実装する必要があるとします。これにより、次のように書くことができます。
RandomNumOp({ Binary: func(a,b int) int { return a+b}, Ternary: func(a,b,c int) int {return a+b+c}, })
実装の制限
残念ながら、Go では、メソッド宣言はファイル レベルで存在する必要があります。複数のメソッドを使用してインターフェイスを実装するには、次の宣言が必要です。
実用的な実装
実用的な実装が必要な場合は、ダミーの実装を使用できます。
type DummyOp struct{} func (DummyOp) Binary(_, _ int) int { return 0 } func (DummyOp) Ternary(_, _, _ int) int { return 0 }
動的部分実装
いくつかのメソッドを動的に設定するには、委任構造体を検討してください。
type CustomOp struct { binary func(int, int) int ternary func(int, int, int) int } func (cop CustomOp) Binary(a, b int) int { // ... } func (cop CustomOp) Ternary(a, b, c int) int { // ... }
非機能実装
メソッドが機能しない場合呼び出し可能である必要はありません。匿名構造体を使用できますリテラル:
var op NumOp = struct{ NumOp }{}
以上がGo は匿名インターフェイスを実装できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。