Map types in Golang
What map types exist in Go? What data types can we use as map keys? What about map values? Are different kinds of maps considered distinct types? And what’s the difference between nil and empty maps? Find out in this handy, bite-size tutorial on map types in Golang.
What map types exist in Go?
There’s no specific data type in Golang called map
; instead, we use the map
keyword to create a map with keys of a certain type, and values of another type (or the same type).
var menu map[string]float64
In this example, we declare a map that has string
s for its keys, and float64
s for its values. The result is a variable of a very specific type: map[string]float64
.
Map types are distinct
As you know, Go is a strongly-typed language, so that means we can only assign things to the menu
variable that have exactly the type map[string]float64
. We couldn’t, for example, assign it a map[string]int
value, or a map[rune]float64
. Those are distinct types.
Golang map key types
What types of keys can a map have? Could we, for example, make a map whose keys are slices, or even functions? No, because the keys must be comparable: that is, the ==
and !=
operators must be defined for that type.
All the basic types (string
, int
, and so on) are comparable; so are structs. Functions and slices are not, and nor are maps, so we can’t have a map whose key is another map!
There’s no such restriction on map values; they can be any type. In fact, it’s common to construct maps of string
to any
to represent trees of arbitrary data.
Nil versus empty maps
Merely declaring the map’s type doesn’t give us a value we can use: we can’t read or write to a nil
map. So if we don’t have any values to put in the map yet, we can initialize it with an empty map literal:
:= map[string]float64{} menu
Next
This is part 2 of a Golang tutorial series on maps. Check out the other posts in the series:
- Declaring and initializing maps
- Storing and retrieving map values
- Finding whether a map key exists
- Iterating over a map
- Frequently asked questions about Go maps
Now that you know how to choose the right key and value types for your map, how do we actually store and retrieve values in a Go map? Carry on to the next tutorial to find out!