Hostinger

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