Go では、インターフェイスを使用してカスタム型を定義できます。ただし、特定の関数を単純な操作として実装する必要がある場合に、インターフェイスの匿名実装を確立できるかどうかという問題が生じます。
疑似コード同様の匿名実装を作成することを提案していますto:
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 { if cop.binary != nil { return cop.binary(a, b) } return 0 } func (cop CustomOp) Ternary(a, b, c int) int { if cop.ternary != nil { return cop.ternary(a, b, c) } return 0 }
使用例:
RandomNumOp(CustomOp{ binary: func(a, b int) int { return a + b }, })
実装に機能が必要ない場合メソッドでは、匿名の構造体リテラルを使用できます:
var op NumOp = struct{ NumOp }{}
以上が匿名インターフェイスの実装は Go で実現できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。