Dans le didacticiel Go Language, ils expliquent le fonctionnement des interfaces:
Go n'a pas de cours. Cependant, vous pouvez définir des méthodes sur les types de structure. Le récepteur de méthode apparaît dans sa propre liste d'arguments entre le mot-clé func et le nom de la méthode.
type Vertex struct {
X, Y float64
}
func (v *Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
Un type d'interface est défini par un ensemble de méthodes. Une valeur de type interface peut contenir n'importe quelle valeur qui implémente ces méthodes.
C'est le seul moyen de créer une interface dans Go. Google explique en outre que:
Un type implémente une interface en implémentant les méthodes. Il n'y a pas de déclaration d'intention explicite [c'est-à-dire des
interface
déclarations].Les interfaces implicites découplent les packages d'implémentation des packages qui définissent les interfaces: aucun ne dépend de l'autre.
Il encourage également la définition d'interfaces précises, car vous n'avez pas besoin de trouver chaque implémentation et de la marquer avec le nouveau nom d'interface.
Tout cela ressemble étrangement à des méthodes d'extension en C # , sauf que les méthodes de Go sont impitoyablement polymorphes; ils fonctionneront sur tout type qui les met en œuvre.
Google affirme que cela encourage un développement rapide, mais pourquoi? Abandonnez-vous quelque chose en vous éloignant des interfaces explicites en C #? Les méthodes d'extension en C # pourraient-elles permettre de tirer certains des avantages des interfaces Go en C #?