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

HUWWW
TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個(gè)贊
在郵件列表上回答了一些長(zhǎng)度,但簡(jiǎn)短的解釋是這不起作用,因?yàn)榈貓D條目不可尋址。這意味著您無(wú)法獲取地圖中條目的地址。那是因?yàn)橄虻貓D添加新值可能會(huì)導(dǎo)致地圖條目移動(dòng),從而導(dǎo)致地址發(fā)生變化。因?yàn)槟荒茉诘貓D中獲取條目的地址,所以所有地圖操作都使用整數(shù)值:從地圖中復(fù)制一個(gè)整數(shù)值,將一個(gè)整數(shù)添加到地圖中。分配給映射中結(jié)構(gòu)的一個(gè)字段將需要讀取-修改-寫(xiě)入操作,而映射不支持(它們可以,但不支持,并且支持它們需要成本)。
數(shù)組和切片中的元素是可尋址的,因?yàn)樗鼈冊(cè)趧?chuàng)建后不會(huì)移動(dòng)。
- 3 回答
- 0 關(guān)注
- 918 瀏覽
添加回答
舉報(bào)
0/150
提交
取消