Почему на значение карты в одной функции влияет запись на карту в другой функции?
Вот мой код:
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]
}
Я довольно новичок в Go, но насколько я знал, так как я передаю значение карты в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}
}
В этом случае код ведет себя так, как я ожидал.v
переменная вmain()
На функцию не влияют изменения переменной вtest2()
, Так почему же карта отличается?