对于不同的数据结构类型(例如map),range子句返回哪些不同的变量?

When looping through an array, the first variable returned is the index, and the second variable returned is the value:

array := []int{2, 3, 4}
for index, value := range array {
    fmt.Printf("Index: %s, Value: %s
", index, value)
}

What is returned when looping through map with the range clause. It is not the same as for array. There cannot be an index of a map anyway. Can we get key names?

As per the documentation of range clause, following are the returned values for different kinds of types that it is used with:

  • array or slice a [n]E, *[n]E, or []E:

    • 1st value: index i int
    • 2nd value (optional): a[i] E (element at index i)
  • string s string type

    • 1st value: index i int
    • 2nd value (optional): rune int (the unicode of the character. to get the actual character, simply cast like this: string(value))
  • map m map[K]V:

    • 1st value: key k K
    • 2nd value (optional): value m[k] V
  • channel c chan E:

    • 1st value: element e E

Simplified read here