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
No answers yet.
Connectez-vous pour laisser une réponse