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

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

DDD
DDDオリジナル
2024-11-26 18:35:13204ブラウズ

Can Anonymous Interface Implementations Be Achieved in Go?

Go での匿名インターフェイスの実装

はじめに

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。