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.