要定义从int到结构顶点的映射,我应该定义map[int]vertex
还是map[int]*vertex
?哪一个是首选?对于一个struct vertex,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?
'map [int] vertex'存储一个值,'map [int] * vertex'存储map元素的指针。在Go中,切片,地图和频道是参考类型。 – peterSO 2010-06-20 22:07:52
对,我想我的措辞可能一直不清楚。我会编辑它,希望它能说明我的意思。 – 2010-06-21 02:13:12