Почему на значение карты в одной функции влияет запись на карту в другой функции?

Вот мой код:

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(), Так почему же карта отличается?

Ответы на вопрос(1)

Ваш ответ на вопрос