在 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传递