2 回答

TA貢獻(xiàn)1772條經(jīng)驗 獲得超6個贊
這是因為空結(jié)構(gòu)不包含任何值。
這對于數(shù)組或切片來說不是很有用。但它對于地圖很有用。沒有價值的地圖就像一套。您可以插入密鑰并測試它們是否存在。正如您所發(fā)現(xiàn)的,缺乏價值可以節(jié)省空間。

TA貢獻(xiàn)1744條經(jīng)驗 獲得超4個贊
類型變量interface{}
可以保存任何值。例如,它可以保存整數(shù)8
,可以保存string
值"hi"
,可以保存結(jié)構(gòu)值image.Point{X: 1, Y: 2}
以及幾乎所有其他內(nèi)容。
如果您分配一個具有interface{}
其元素類型的切片,則必須分配內(nèi)存,以便您可以在其元素中存儲任何值。當(dāng)使用make()
分配它時,它的所有元素都將獲得元素類型的零值(這是nil
針對interface{}
),但仍然需要分配內(nèi)存,否則以后將無法設(shè)置元素。
另一方面,空結(jié)構(gòu)struct{}
沒有字段,它不能保存任何值(除了struct{}
)。當(dāng)您分配一個具有struct{}
其元素類型的切片時,不需要分配內(nèi)存,因為您將無法在其中存儲任何需要內(nèi)存的內(nèi)容。所以不為這種類型分配內(nèi)存是一個簡單而聰明的優(yōu)化。
- 2 回答
- 0 關(guān)注
- 170 瀏覽
添加回答
舉報