我是golang的新手,在運行此代碼片段時,我將len設置為4,試圖理解為什么會這樣?package mainimport "fmt"type phone struct { model string camera Camera ram int}type Camera struct { lens string aparature int}func main() { var m = make(map[string]phone) myphn1 := phone{model: "iphone", camera: Camera{"20", 4}, ram: 6} myphn2 := phone{model: "pixel", camera: Camera{"50", 2}, ram: 6} m["myphn1"] = myphn1 m["myphn2"] = myphn2 var k = make([]string, len(m)) for key, _ := range m { k = append(k, key) } fmt.Println(k) fmt.Println(len(k))}我知道這在創(chuàng)建時增加了2的大小,但是在打印時它給出了類似的東西,是2個未分配條目的答案空間嗎?[ myphn2 myphn1]4
2 回答

慕娘9325324
TA貢獻1783條經驗 獲得超4個贊
這將創(chuàng)建一個長度為 2 的切片(此處為 2):len(m)
var k = make([]string, len(m))
這增加了兩個元素,總共4個:
for key, _ := range m {
k = append(k, key)
}
如果要預先分配切片,則需要提供長度為零以及所需的容量:
var k = make([]string, 0, len(m))
這在 Tour of Go 中提供了一些示例。

慕田峪7331174
TA貢獻1828條經驗 獲得超13個贊
創(chuàng)建長度為 2 的切片,并向其追加了兩個元素,因此長度為 4。
您可能要做的是創(chuàng)建容量為 2 的切片:
var k = make([]string,0,len(m))
- 2 回答
- 0 關注
- 91 瀏覽
添加回答
舉報
0/150
提交
取消