Sobes.tech
Junior — Middle

Peut-on ajouter des éléments à une tranche passée en argument à une fonction?

sobes.tech IA

Réponse de l'IA

Oui, il est possible d'ajouter des éléments à la tranche passée à la fonction, mais il est important de comprendre qu'en Go, une tranche (slice) est une structure contenant un pointeur vers un tableau, une longueur et une capacité.

Si dans la fonction vous utilisez append et assignez le résultat à une variable locale, les modifications n'affecteront pas la tranche d'origine en dehors de la fonction, sauf si vous renvoyez une nouvelle tranche ou passez un pointeur vers la tranche.

Exemple:

func addElement(s []int) []int {
    s = append(s, 42) // ajout d'un élément
    return s
}

func main() {
    s := []int{1, 2, 3}
    s = addElement(s) // il faut réassigner
    fmt.Println(s) // [1 2 3 42]
}

Si vous souhaitez modifier la tranche à l'intérieur de la fonction sans la renvoyer, vous pouvez passer un pointeur:

func addElementPtr(s *[]int) {
    *s = append(*s, 42)
}

func main() {
    s := []int{1, 2, 3}
    addElementPtr(&s)
    fmt.Println(s) // [1 2 3 42]
}