Wird eine Map in Go als Wert oder als Referenz übergeben? Warum sind Änderungen innerhalb der Funktion von außen sichtbar?
Hallo zusammen! Ich habe gerade angefangen, Go zu lernen, und komme nicht ganz dahinter, wie Maps an Funktionen übergeben werden.
Ich habe diesen Code geschrieben:
```go
package main
import "fmt"
func modifyMap(m map[string]int) {
m["key"] = 42
fmt.Println("Innerhalb der Funktion:", m)
}
func main() {
myMap := map[string]int{"key": 0}
fmt.Println("Vor dem Aufruf:", myMap)
modifyMap(myMap)
fmt.Println("Nach dem Aufruf:", myMap)
}
```
Ausgabe:
```
Vor dem Aufruf: map[key:0]
Innerhalb der Funktion: map[key:42]
Nach dem Aufruf: map[key:42]
```
Ich hatte erwartet, dass die Map als Wert übergeben wird (wie int oder string) und Änderungen innerhalb der Funktion die originale Map nicht beeinflussen. Aber sie beeinflussen sie doch!
Wenn ich dasselbe mit einem Array versuche:
```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] — unverändert!
}
```
Dann verhält sich das Array wie ein normaler Wert. Wo liegt der Unterschied? Map wird übergeben...