这里是我的代码:为什么一个函数中的映射值受到另一个函数中映射项的影响?
func test(v map[string]string) {
v["foo"] = "bar"
}
func main() {
v := make(map[string]string)
test(v)
fmt.Printf("%v\n", v) // prints map[foo:bar]
}
我很新去的,但据我所知,因为我通过地图的价值test()
,而不是一个指针图,test()
功能应该修改地图的一个不同的变量,从而不会影响main()
中变量的值。我本来期望它打印map[]
。我测试了一个不同的场景:
type myStruct struct {
foo int
}
func test2(v myStruct) {
v.foo = 5
}
func main() {
v := myStruct{1}
test2(v)
fmt.Printf("%v\n", v) // prints {1}
}
在这种情况下,代码的行为与我的预期相同。 main()
函数中的v
变量不受test2()
中变量的更改影响。那么为什么地图不同呢?