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] } 3Is 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 { ... } 1A Type agnostic solution:
for _, key := range reflect.ValueOf(yourMap).MapKeys() { value := yourMap.MapIndex(key).Interface() fmt.Println("Key:", key, "Value:", value) } 2Using 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 }