Avatar ·

En Go, une map est-elle passée par valeur ou par référence ? Pourquoi les modifications à l'intérieur d'une fonction sont-elles visibles à l'extérieur ?

Bonjour à tous ! Je viens de commencer à apprendre Go et je n'arrive pas à comprendre comment les map sont passées aux fonctions. J'ai écrit ce code : ```go package main import "fmt" func modifyMap(m map[string]int) { m["key"] = 42 fmt.Println("À l'intérieur de la fonction :", m) } func main() { myMap := map[string]int{"key": 0} fmt.Println("Avant l'appel :", myMap) modifyMap(myMap) fmt.Println("Après l'appel :", myMap) } ``` Sortie : ``` Avant l'appel : map[key:0] À l'intérieur de la fonction : map[key:42] Après l'appel : map[key:42] ``` Je m'attendais à ce que la map soit passée par valeur (comme un int ou une string), et que les modifications à l'intérieur de la fonction n'affectent pas la map originale. Mais elles l'affectent ! Pourtant, si j'essaie la même chose avec un tableau : ```go func modifyArray(arr [3]int) { arr[0] = 100 } func main() { a := [3]int{1, 2, 3} modifyArray(a) fmt.Println(a) // [1 2 3] — inchangé ! } ``` Le tableau se comporte comme une valeur normale. Quelle est la différence ? Une map est-elle passée