要定義從int到struct頂點的映射,我應該定義map[int]vertex還是map[int]*vertex?首選哪一個?我擴展了Chickencha的代碼:package maintype 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 40 0 3 30 0 2 2從輸出中,我的理解是,如果要更改struct成員,則必須使用指向該結構的指針。但是我仍然不確定潛在的原因。特別是為什么我不能分配給a [0] .x?
2 回答

瀟瀟雨雨
TA貢獻1833條經驗 獲得超4個贊
這個問題的答案可能取決于Go地圖的實現方式。對于當前的實現,我將看一下Go map運行時標頭hashmap.h和代碼hashmap.c文件。它還取決于您如何使用地圖,例如針對地圖,鍵和元素數據結構等的活動類型和數量。
要就地更新矢量元素值,請從地圖上讀取矢量元素值,更新元素值,然后將更新后的元素值寫入地圖。例如
package main
type vertex struct {
x, y int
}
func main() {
a := make(map[int]vertex)
a[0] = vertex{0, 0}
println(a[0].x, a[0].y)
v0 := a[0]
v0.x = 1
a[0] = v0
println(a[0].x, a[0].y)
}
輸出:
0 0
1 0
- 2 回答
- 0 關注
- 320 瀏覽
添加回答
舉報
0/150
提交
取消