Avatar ·

在 Go 中 map 是按值传递还是按引用传递?为什么函数内部的修改在外部可见?

大家好!我刚开始学习Go,一直搞不清楚map是如何传递给函数的。 我写了这样的代码: ```go package main import "fmt" func modifyMap(m map[string]int) { m["key"] = 42 fmt.Println("函数内部:", m) } func main() { myMap := map[string]int{"key": 0} fmt.Println("调用前:", myMap) modifyMap(myMap) fmt.Println("调用后:", myMap) } ``` 输出: ``` 调用前: map[key:0] 函数内部: map[key:42] 调用后: map[key:42] ``` 我原本以为map会像int或string一样按值传递,函数内部的修改不会影响原始的map。但为什么它们会影响呢! 同时,如果我尝试对数组做同样的操作: ```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] — 没有变化! } ``` 数组表现得像普通的值。区别在哪里?map传递