int에서 struct vertex로 맵을 정의하려면 map[int]vertex
또는 map[int]*vertex
을 정의해야합니까? 어느 쪽이 선호됩니까? struct vertex의 경우 map [int] vertex와 map [int] * vertex의 차이점은 무엇입니까?
package main
type vertex struct {
x, y int
}
func main() {
a := make(map[int]vertex)
b := make(map[int]*vertex)
v := &vertex{0, 0}
a[0] = *v
b[0] = v
v.x, v.y = 4, 4
println(a[0].x, a[0].y, b[0].x, b[0].y)
//a[0].x = 3 // cannot assign to (a[0]).x
//a[0].y = 3 // cannot assign to (a[0]).y
b[0].x = 3
b[0].y = 3
println(a[0].x, a[0].y, b[0].x, b[0].y)
u1 := a[0]
u1.x = 2
u1.y = 2
u2 := b[0]
u2.x = 2
u2.y = 2
println(a[0].x, a[0].y, b[0].x, b[0].y)
}
출력 : 출력에서
0 0 4 4
0 0 3 3
0 0 2 2
, 내가 장소에 구조체 멤버를 변경하려는 경우 나의 이해는 내가 포인터를 사용해야한다 구조체. 하지만 여전히 근본적인 이유가 확실하지 않습니다. 특히 [0] .x에 할당 할 수없는 이유는 무엇입니까?
'map [int] vertex'는 값을 저장하고'map [int] * vertex'는 map 요소의 포인터를 저장합니다. Go에서 슬라이스,지도 및 채널은 참조 유형입니다. – peterSO
맞아요. 내 말씨가 명확하지 않았을 수도 있습니다. 나는 그것이 의미하는 바를 말하기를 바란다. –