Méthodes : fonctions associées aux types
Différence entre fonction et méthode
Dans Go, on n’a pas de classes comme en Java, en C++ ou en PHP, mais on peut associer des méthodes à n’importe quel type (struct, etc.).
Concrètement, une méthode est similaire à une fonction ordinaire, mais avec un récepteur (receiver) placé avant le nom de la fonction. Ce récepteur indique sur quel type cette méthode s’applique.
Exemple simple : on a un type Person
, et on veut lui associer une méthode Greet()
. On écrit :
func (p Person) Greet() {
fmt.Println("Bonjour, je m'appelle", p.Name)
}
Ici, p Person
avant le nom Greet
fait de Greet
une méthode. Sans ce récepteur, Greet
ne serait qu’une fonction ordinaire.
Comment déclarer une méthode en Go ?
Syntaxe d’une méthode
type Person struct {
Name string
Age int
}
// Déclaration d'une méthode sur Person
func (p Person) Hello() {
fmt.Println("Hello, je suis", p.Name)
}
On écrit func (p Person) Hello()
, ce qui signifie :
- Hello = le nom de la méthode
- Person = le type sur lequel cette méthode est définie.
Appeler Hello
package main
import "fmt"
type Person struct {
Name string
Age int
}
// Méthode Hello sur Person (récepteur par valeur)
func (p Person) Hello() {
fmt.Println("Hello, je suis", p.Name)
}
func main() {
bob := Person{
Name: "Bob",
Age: 30,
}
// Appel de la méthode Hello
bob.Hello()
// Affichera : "Hello, je suis Bob"
}
On crée une variable bob de type Person qui a Name: "Bob"
et Age: 30
.
bob.Hello()
équivaut conceptuellement à appeler Hello(bob)
, mais la notation bob.Hello()
est plus naturelle pour exprimer "bob exécute Hello".
Dans le terminal, vous verrez la phrase :
Hello, je suis Bob