Sobes.tech
Junior — Middle

Comment passe-t-on un slice à une fonction dans un langage de programmation?

sobes.tech IA

Réponse de l'IA

En Go, une tranche (slice) est transmise à une fonction par valeur, mais la tranche contient un pointeur vers un tableau, ainsi que sa longueur et sa capacité. Cela signifie qu’en passant une tranche à une fonction, la structure de la tranche est copiée, mais pas les données du tableau pointé.

Par conséquent, les modifications des éléments de la tranche à l’intérieur de la fonction se reflètent dans le tableau d’origine, mais changer la tranche elle-même (par exemple, lui assigner une nouvelle tranche) n’affecte pas la tranche externe.

Exemple :

package main
import "fmt"

func modifySlice(s []int) {
    s[0] = 100       // modifie l’élément du tableau d’origine
    s = append(s, 200) // modifie la tranche locale, la tranche externe ne change pas
}

func main() {
    s := []int{1, 2, 3}
    modifySlice(s)
    fmt.Println(s) // Affiche : [100 2 3]
}

Ainsi, la tranche est transmise par valeur, mais grâce au pointeur interne, les modifications des éléments sont visibles en dehors de la fonction.