Maison > développement back-end > Golang > le corps du texte

Peut-on implémenter des interfaces anonymes ?

DDD
Libérer: 2024-11-27 03:44:16
original
864 Les gens l'ont consulté

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) {
    // ...
}
Copier après la connexion

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 }
Copier après la connexion

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},
})
Copier après la connexion

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 }
Copier après la connexion

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 {
    // ...
}
Copier après la connexion

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 }{}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal