En Go, les méthodes sont des fonctions avec un receiver (récepteur), indiquant à quel type la méthode appartient :
type User struct { Name string } func (u *User) SayHello() { fmt.Println("Salut,", u.Name) }
(u *User)) fonctionne comme le premier argument d'une fonction, mais la syntaxe et les appels diffèrent.Important ! Les méthodes ne peuvent être déclarées que pour des types définis dans votre package (pas de méthodes sur un type défini dans un autre package, y compris les types intégrés). Le comportement avec les alias (type alias) est particulier :
type MyInt int), vous pouvez ajouter des méthodes.type MyInt = int), vous ne pouvez pas ajouter de méthodes, car c'est juste un alias.Exemple :
type MyInt int func (m MyInt) Double() int { return int(m) * 2 } // Type alias type MyIntAlias = int // func (m MyIntAlias) Double() int { ... } // erreur de compilation
Peut-on déclarer une méthode pour un tableau de type []int ou pour un type alias ?
Réponse : Pour un tableau de type intégré ([]int), il n'est pas possible de déclarer des méthodes. Pour un nouveau type utilisateur basé sur un tableau — c'est possible :
type MySlice []int func (s MySlice) Sum() int { ... } // autorisé
Pour le type alias, c'est impossible :
type SuperSlice = []int // func (s SuperSlice) Sum() int { ... } // erreur
Histoire
Histoire
Histoire
En essayant d'ajouter des méthodes aux types d'un package externe (par exemple, time.Time) pour standardiser le travail avec des dates, il est devenu évident que cela n'était pas possible en Go — il a fallu utiliser la composition et des fonctions utilitaires.