Maps are one of the most useful data structures. It can store in key-value pairs and doesn’t allow for duplicate keys. Now, we will learn how the Go programming language implements maps.
What is a map?
A map is a key-value pair storage container. It offers fast and efficient lookups. And it doesn’t allow duplicate keys while it can have duplicate values.
Declaration of a Map in Go
Now we will see how to declare a map in Go.
package main import ( "fmt" ) func main() { var names map[int]string // name map has int keys and string values }
In the above example, the key is of type int while the values are of string type.
Initializing a Map
Let’s see how we can initialize a map with values.
1. Using make() function
The function make(), can be used to initialize a map as shown below.
package main import ( "fmt" ) func main() { var names = make(map[int]string) names[0] = "John" names[1] = "Jane" fmt.Println(names) // map[0:John 1:Jane] }
2. Using literal syntax
Maps can be initialized using map literal syntax. Below is an example illustrating that. Let’s take the same code before and modify that to initialize with map literal.
package main import ( "fmt" ) func main() { var names = map[int]string { 0: "John", 1: "Jane", // last comma is a must } fmt.Println(names) // prints map[0:John 1:Jane] }
Working with maps in Golang
We can insert, delete, retrieve keys in a map. Let’s see how to do that.
1. Inserting elements in a map
You can insert keys in two ways. Either insert keys when initializing or use index syntax to initialize.
package main import ( "fmt" ) func main() { var names = make(map[int]string) names[0] = "Freddy" // indexed insertion names[1] = "Shawn" fmt.Println(names) // prints map[0:Freddy 1:Shawn] }
2. Getting values from a map
We can get values associated with keys from a map using index notation as shown below.
package main import ( "fmt" ) func main() { var names = make(map[int]string) names[0] = "Freddy" // indexed insertion names[1] = "Shawn" fmt.Println(names[1]) // prints Shawn }
3. Check if a key exists
We get a boolean when we try retrieving a value. That helps to check if a key exists.
package main import ( "fmt" ) func main() { var names = make(map[int]string) names[0] = "Freddy" // indexed insertion names[1] = "Shawn" fred, exists := names[0] if(exists) { fmt.Printf("%s exists", fred) // prints "Freddy exists" } }
4. Delete key from a map
We use the delete function to remove a key from a map. Let’s see an example of how it is done.
package main import ( "fmt" ) func main() { var names = make(map[int]string) names[0] = "Freddy" // indexed insertion names[1] = "Shawn" names[2] = "Batman" // delete shawn delete(names, 1) fmt.Println(names) // prints map[0:Freddy 2:Batman] }
5. Iterating over a map entries
Using range we can iterate over a map and get keys and values both.
package main import ( "fmt" ) func main() { var names = make(map[int]string) names[0] = "Freddy" // indexed insertion names[1] = "Shawn" names[2] = "Batman" names[3] = "Spiderman" names[4] = "Joker" for _, name := range names { fmt.Println(name) } // prints: // Joker // Freddy // Shawn // Batman // Spiderman }
This is how we can add or remove items, retrieve keys and values from a map. It is one of the most useful data structures.