作为 Golang 初学者,看到 map 作为函数形参时是引用类型。 那我就感觉 map 作为函数形参时,其在函数内外的内存地址应该是一致,就做了个实验。 结果发现 map 在函数内外是不同的内存地址。 请大佬帮忙解惑。 示例代码如下: ``` import "fmt" func TestMapInFunc() { m := map[int]string { 1: "a", 2: "b", 3: "v", } p := &m //fmt.Printf("m:%p\n", m) fmt.Printf("m:%p\n", p) fmt.Printf("MapInfo m:%v\n", m) modifyMap(m) fmt.Printf("after modify MapInfo m:%v\n", m) } func modifyMap(m map[int]string) { if _, ok := m[1]; ok { m[1] = "The Second" } p1 := &m fmt.Printf("in function m:%p\n", p1) fmt.Printf("in function modifyMap:%v\n", m) } ``` 运行结果如下:<br> m:0xc0000da018<br> MapInfo m:map[1:a 2:b 3:v]<br> in function m:0xc0000da028<br> in function modifyMap:map[1:The Second 2:b 3:v]<br> after modify MapInfo m:map[1:The Second 2:b 3:v]<br> 可以看到m作为map,在函数外的内存地址是0xc0000da018,在函数内的地址是0xc0000da028。