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

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

DDD
リリース: 2024-11-26 18:35:13
オリジナル
225 人が閲覧しました

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

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