Maison >développement back-end >Golang >Peut-on implémenter des interfaces anonymes ?

Peut-on implémenter des interfaces anonymes ?

DDD
DDDoriginal
2024-11-27 03:44:16942parcourir

Can Go Implement Anonymous Interfaces?

La mise en œuvre d'une interface anonyme est-elle possible dans Go ?

Considérez l'interface suivante et une fonction d'une bibliothèque imaginaire :

type NumOp interface {
    Binary(int, int) int
    Ternary(int, int, int) int
}

func RandomNumOp(op NumOp) {
    // ...
}

Pour implémenter cette interface, on pourrait définir un type comme :

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 }

Besoin d'une implémentation fonctionnelle

Cependant, supposons que nous devions implémenter l'interface à l'aide de fonctions anonymes pour des scénarios à usage unique. Cela nous permettrait d'écrire :

RandomNumOp({
   Binary: func(a,b int) int { return a+b},
   Ternary: func(a,b,c int) int {return a+b+c},
})

Restrictions d'implémentation

Malheureusement, en Go, les déclarations de méthode doivent résider au niveau du fichier. Pour implémenter une interface avec plusieurs méthodes, ces déclarations sont requises.

Implémentation réalisable

Si une implémentation fonctionnelle est nécessaire, vous pouvez utiliser une implémentation factice :

type DummyOp struct{}

func (DummyOp) Binary(_, _ int) int     { return 0 }
func (DummyOp) Ternary(_, _, _ int) int { return 0 }

Implémentation partielle dynamique

Pour définir certaines méthodes de manière dynamique, considérez une delegator struct :

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 {
    // ...
}

Implémentation non fonctionnelle

Si les méthodes n'ont pas besoin d'être appelables, vous pouvez utiliser un littéral de structure anonyme :

var op NumOp = struct{ NumOp }{}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn