Exemple : type Geometry interface { Area() float64; Perimeter() float64 }
Les types qui définissent toutes les méthodes de l'interface satisfont automatiquement l'interface, sans avoir besoin de déclarer explicitement qu'ils la mettent en œuvre.
Les interfaces permettent de créer du code généralisé qui peut fonctionner avec plusieurs types différents.
Exemple : Une fonction Measure(g Geometry) peut calculer l'aire et le périmètre de toute géométrie, que ce soit un cercle, un rectangle, etc.
Les interfaces peuvent être composées d'autres interfaces, ce qui signifie qu'une interface peut contenir toutes les méthodes d'une ou de plusieurs autres interfaces.
Exemple : type ReadWrite interface { Reader; Writer }
Cette caractéristique offre une grande flexibilité pour créer des interfaces complexes tout en maintenant la simplicité et la lisibilité.
Méthodes avec des pointeurs et des récepteurs de valeur#
Les méthodes en Go peuvent être déclarées soit avec un récepteur de valeur, soit avec un récepteur de pointeur.
Les récepteurs de valeur reçoivent une copie de la valeur, tandis que les récepteurs de pointeur reçoivent une référence à la valeur.
Exemple : func (v Value) ChangeVal() { v.x = 5 } // ne modifie pas la valeur originale
Exemple : func (p *Pointer) ChangePtr() { p.x = 5 } // modifie la valeur originale
Utiliser un récepteur de pointeur lorsque vous devez modifier l'état de l'objet ou si l'objet lui-même est volumineux et coûteux à copier.