Чтобы определить карту от int до структурной вершины, я должен определить map[int]vertex
или map[int]*vertex
? Какой из них предпочтительнее?
Я расширил код Chickencha:
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
Исходя из этого, я понимаю, что если я хочу изменить элемент struct на месте, я должен использовать указатель на структуру.
Но я все еще не уверен в основных причинах. Особенно, почему я не могу присвоить [0] .x?