這裏是我的代碼:爲什麼一個函數中的映射值受到另一個函數中映射項的影響?
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()
中變量的更改影響。那麼爲什麼地圖不同呢?