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!