Go permet la définition de types personnalisés à l'aide d'interfaces. Cependant, cela soulève la question de savoir s'il est possible d'établir une implémentation anonyme d'une interface pour des situations où des fonctions spécifiques doivent être implémentées sous forme d'opérations simples.
Le pseudo code fourni suggère de créer une implémentation anonyme similaire à :
RandomNumOp({ Binary: func(a, b int) int { return a + b }, Ternary: func(a, b, c int) int { return a + b + c }, })
Cependant, cette approche n'est pas directement réalisable dans Go car les déclarations de méthode doivent être définies au niveau du fichier. Par conséquent, pour implémenter une interface avec plusieurs méthodes, des déclarations de méthode explicites sont nécessaires.
Pour obtenir une implémentation réalisable, vous pouvez utiliser une structure existante ou créer une implémentation « factice » pour souligner l’absence de conséquences. Voici un exemple :
type DummyOp struct{} func (DummyOp) Binary(_, _ int) int { return 0 } func (DummyOp) Ternary(_, _, _ int) int { return 0 }
Vous pouvez également considérer un type de structure de délégué qui vous permet de fournir dynamiquement des fonctions pour les méthodes :
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 }
Exemple d'utilisation :
RandomNumOp(CustomOp{ binary: func(a, b int) int { return a + b }, })
Si votre implémentation ne nécessite pas de méthodes fonctionnelles, vous pouvez utiliser une structure anonyme littéral :
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!