Is there a way to get a list of all the keys in a Go language map? The number of elements is given by len(), but if I have a map like:
m := map[string]string{ "key1":"val1", "key2":"val2" };How do I iterate over all the keys?
5 Answers
for k, v := range m { fmt.Printf("key[%s] value[%s]\n", k, v)
}or
for k := range m { fmt.Printf("key[%s] value[%s]\n", k, m[k])
}Go language specs for for statements specifies that the first value is the key, the second variable is the value, but doesn't have to be present.
Here's some easy way to get slice of the map-keys.
// Return keys of the given map
func Keys(m map[string]interface{}) (keys []string) { for k := range m { keys = append(keys, k) } return keys
}
// use `Keys` func
func main() { m := map[string]interface{}{ "foo": 1, "bar": true, "baz": "baz", } fmt.Println(Keys(m)) // [foo bar baz]
} 3 Is there a way to get a list of all the keys in a Go language map?
ks := reflect.ValueOf(m).MapKeys()how do I iterate over all the keys?
Use the accepted answer:
for k, _ := range m { ... } 1 A Type agnostic solution:
for _, key := range reflect.ValueOf(yourMap).MapKeys() { value := yourMap.MapIndex(key).Interface() fmt.Println("Key:", key, "Value:", value)
} 2 Using Generics:
func Keys[K comparable, V any](m map[K]V) []K { keys := make([]K, 0, len(m)) for k := range m { keys = append(keys, k) } return keys
}