ホームページ > バックエンド開発 > Golang > Go は匿名インターフェイスを実装できますか?

Go は匿名インターフェイスを実装できますか?

DDD
リリース: 2024-11-27 03:44:16
オリジナル
885 人が閲覧しました

Can Go Implement Anonymous Interfaces?

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート