Iterating over all the keys of a map

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.

4

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 } 

You Might Also Like