Table des matières

Fonctions

func plus(a int, b int) int {
    return a + b
}

L'exécution de cette fonction est habituel

x := plus(4, 7)

Fonctions à retours multiples

Une fonction Go peut renvoyer simultanément plusieurs résultats :

func exemple(a int) (int, int){
    carre := a*a
    cube := a*a*a
    return carre, cube
}

Et l'exécution prendrait la forme

x, y := exemple(3)

Ici, x reçoit le premier élément du retour de fonction, c'est à dire le carré, et y reçoit le second, donc le cube.

Comme en lua, il est possible de ne laisser de côté un des retours en utilisant _

_, y := exemple(3)

'_' n'est pas un nom de variable. Cette ligne signifie que la première partie du retour, le carré, n'est pas utilisée. '_' est comme une variable que l'on met aussitôt à la poubelle.

Renvoyer un tableau

Renvoyer une donnée complexe comme un tableau est beaucoup plus simple qu'en C, on n'a pas de problématique de gestion de mémoire, mais la déclaration n'est pas si évidente. Par exemple, déclarons une fonction qui renvoie un tableau de 6 entiers. // Je donne tout le programme pour voir aussi l'utilisation.//

package main

import "fmt"

func main() {
    x := buildIntArray()
    fmt.Println("tout le tableau : ", x)
}

func buildIntArray() [6]int{
    a := [6]int{10, 32, 27, 14, 61, 12}
    return a
}

Comme vous pouvez le voir, la taille du tableau doit être connue. Si on a besoin d'un équivalent sans avoir à connaître la taille à la compilation, il faut utiliser un slice.

package main

import "fmt"

func main() {
    x := buildIntSlice(2)
    fmt.Println("tout le slice : ", x)
    x[1] = 13
    x = append(x, 17)
    fmt.Println("tout le slice : ", x)
}

func buildIntSlice(size int) []int{
    s := make([]int, size)
    return s
}

Modifier un argument

Comme en C, on peut vouloir que la fonction modifie un argument. En Go, on ne pourra passer que par l'usage de pointeurs.

package main

import "fmt"

func main(){
    x := 13;
    fmt.Println(x)
    change(&x)   
    fmt.Println(x)
}

func change(a *int){
    *a = *a + 1
}