为什么我在从只有 3 个实体的地图创建的数组中得到 6 个条目?

我对 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


精慕HU
浏览 91回答 2
2回答

凤凰求蛊

和keys := make([]string, len(supportedCards))您创建一个[]string包含三个空元素的 。您可以使用它们的索引来分配它们。当您稍后附加它时,新条目将添加到末尾,生成长度为 6 的结果,其中前三个为空。

慕斯王

除了@xarantolus的答案之外,您可以通过以下方式保持 for-range 循环不变,而不是使用索引:keys := make([]string, 0, len(supportedCards))第三个参数是幻灯片的容量。参考: https: //tour.golang.org/moretypes/13
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go