여기 내 코드입니다 : 내가지도에 대한 포인터를 test()
에지도 값을 전달하고 있지 않다 때문에 나는 지금까지 내가 알고 있었다으로 꽤 이동하는 새로운, 그러나이야한 기능의지도 값이 다른 기능의지도 항목에 영향을받는 이유는 무엇입니까?
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()
기능 지도의 다른 변수를 수정해야하므로 변수 값에 영향을 미치지 않습니다. 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()
의 변수 변경으로 영향을받지 않습니다. 그러면지도가 다른 이유는 무엇입니까?