Méthodes

Méthodes #

// Go supporte des _méthodes_ définies dans
// les structures.

package main

import "fmt"

type rect struct {
    width, height int
}

// Cette méthode `area` a un _type receveur_ `*rect`.
func (r *rect) area() int {
    return r.width * r.height
}

// Les méthodes peuvent être définies soit pour un
// pointeur, soit pour une valeur de type receveur. Voici
// un exemple avec une valeur.
func (r rect) perim() int {
    return 2*r.width + 2*r.height
}

func main() {
    r := rect{width: 10, height: 5}

    // Ici on appelle les deux méthodes définies dans
    // notre structure.
    fmt.Println("area: ", r.area())
    fmt.Println("perim:", r.perim())

    // Go gère automatiquement la conversion entre
    // valeur et pointeur pour les appels de méthode. On
    // peut vouloir utiliser un type receveur pointeur
    // pour éviter la copie lors des appels de méthode ou
    // pour modifier l'objet fourni.
    rp := &r
    fmt.Println("area: ", rp.area())
    fmt.Println("perim:", rp.perim())
}
$ go run methods.go 
area:  50
perim: 30
area:  50
perim: 30

# Nous allons ensuite regarder les mécanismes pour 
# regrouper et nommer les ensembles de méthodes 
# liés : les interfaces.