假設我有一個帶有字符串屬性 b 的簡單結構 a:type A struct { B string}以下代碼使用 A 類型的數組:testArray := []A{A{}}testArray[0].B = "test1"fmt.Println(testArray[0].B)將按預期打印出“test1”。但是這段代碼看起來同樣簡單:testMap := make(map[string]A)testMap["key"] = A{}testMap["key"].B = "test2"fmt.Println(testMap["key"].B)不會打印出“test2”,而是會導致以下錯誤:無法分配給 testMap["key"].B那么,為什么分配給映射中的子屬性會導致錯誤,同時分配給數組中的子屬性按預期工作?我想知道為什么這對地圖不起作用以及為什么它對數組起作用。我也很想知道為什么他們設計語言時會在兩種數據結構之間存在這種差異。
3 回答

HUWWW
TA貢獻1874條經驗 獲得超12個贊
在郵件列表上回答了一些長度,但簡短的解釋是這不起作用,因為地圖條目不可尋址。這意味著您無法獲取地圖中條目的地址。那是因為向地圖添加新值可能會導致地圖條目移動,從而導致地址發生變化。因為您不能在地圖中獲取條目的地址,所以所有地圖操作都使用整數值:從地圖中復制一個整數值,將一個整數添加到地圖中。分配給映射中結構的一個字段將需要讀取-修改-寫入操作,而映射不支持(它們可以,但不支持,并且支持它們需要成本)。
數組和切片中的元素是可尋址的,因為它們在創建后不會移動。
- 3 回答
- 0 關注
- 906 瀏覽
添加回答
舉報
0/150
提交
取消