我對 Go 中的地圖類型的理解有一個看似簡單的問題。如果我創建一個簡單的地圖,例如var thisMap = map[string]string { "8f14e45fceea167a5a36dedd4bea2543": "Charming", "1679091c5a880faf6fb5e6087eb1b2dc": "Citi", "e4da3b7fbbce2345d7772b0674a318d5": "Chase",}將鍵填充到數組中keys := make([]string, len(supportedCards))for k := range supportedCards { keys = append(keys, k)}然后嘗試將這些鍵連接成一個逗號分隔的值,我可以將其附加到任何字符串fmt.Println(strings.Join(keys,","))我期望結果是8f14e45fceea167a5a36dedd4bea2543,1679091c5a880faf6fb5e6087eb1b2dc,e4da3b7fbbce2345d7772b0674a318d5但我真正看到的是,,,8f14e45fceea167a5a36dedd4bea2543,1679091c5a880faf6fb5e6087eb1b2dc,e4da3b7fbbce2345d7772b0674a318d5為什么迭代映射會創建 6 個條目而不是 3 個?https://play.golang.org/p/Ou67K1Kfvsf
2 回答

鳳凰求蠱
TA貢獻1825條經驗 獲得超4個贊
和
keys := make([]string, len(supportedCards))
您創建一個[]string
包含三個空元素的 。您可以使用它們的索引來分配它們。
當您稍后附加它時,新條目將添加到末尾,生成長度為 6 的結果,其中前三個為空。

慕斯王
TA貢獻1864條經驗 獲得超2個贊
除了@xarantolus的答案之外,您可以通過以下方式保持 for-range 循環不變,而不是使用索引:
keys := make([]string, 0, len(supportedCards))
第三個參數是幻燈片的容量。參考: https: //tour.golang.org/moretypes/13
- 2 回答
- 0 關注
- 131 瀏覽
添加回答
舉報
0/150
提交
取消