Skip to content

Understanding Data Structure of Type Map.


Objective

Understanding Map's in Go.

Maps

Imagine yourself creating a team of Avengers and need to add contact details of all your Super Hero's, you essentially would require a phone number be associated with only one Super Hero, this can be easily done using 'Maps' in Go.

It is also known as 'Hash Table' in other programming languages and these offer faster lookups, adds and deletes.

Structure

Navigate to our code folder

1
code/basic/

For our program create a new folder '13_map'

1
code/basic/13_map/

And lets create a file 'maps.go' in it, finally the structure would look like this:

1
code/basic/13_map/maps.go

Declaration

Syntax

Declaration & initialization method

1
mapName := map[KeyType]ValueType

With built-in function make()

1
map := make(map[KeyType]ValueType)

Code

We will write the code in 2 parts:

1.)

part-1 maps.go
1 package main
2
3 import "fmt"
4
5 func main() {
6   // Let's make contact list with names & phone numbers
7   // Initialize a map 'contactList'
8   contactList := make(map[string]int)
9   // Adding values to map
10  contactList["Iron Man"] = 878111222
11  contactList["Thor"] = 121131141
12  contactList["Batman"] = 483910138
13  contactList["Spider Man"] = 478282929
14
15    // print out the map
16    for key, value := range contactList {
17        fmt.Printf("Key = %s\tValue = %d\n", key, value)
18    }
19    fmt.Println("")
20    // Iron man decides to change his number
21    contactList["Iron Man"] = 333333333
22    fmt.Printf("The new contact no of Iron Man is: %d\n", contactList["Iron Man"])
23    fmt.Println("")
24    // Now Hulk wants to join the team
25    contactList["Hulk"] = 911831925
26
27    // New team is
28    for key, value := range contactList {
29        fmt.Printf("Key = %s\tValue = %d\n", key, value)
30    }
31

Review

On line 8 we declare a 'map' and initialize using 'make'

1
contactList := make(map[string]int)

We create a map with 'key' of type 'string' and 'value' of type 'int', we want to map the name of the super hero along with their contact number.

We can add values to map as done from line 10 to 14.

1
2
3
4
contactList["Iron Man"] = 878111222
contactList["Thor"] = 121131141
contactList["Batman"] = 483910138
contactList["Spider Man"] = 478282929

Map can also be declared and initialized using the following syntax

1
2
3
4
5
6
contactList := map[string]int {
    "Iron Man": 878111222,
    "Thor": 121131141,
    "Batman": 483910138,
    "Spider Man": 478282929,
}

On line 16 we print out the map. We can also change the values of the key, on line 21 we change the number of Iron Man.

1
contactList["Iron Man"] = 333333333

We can also add new super hero on line 25

1
contactList["Hulk"] = 911831925

2.)

part-2 maps.go
32  /*
33        Operators in maps
34    */
35    // Length of our super hero team
36    fmt.Println("Length: ", len(contactList))
37
38    // Spider man is not performing well and we need to delete him
39    delete(contactList, "Spider Man")
40    fmt.Println("Length: ", len(contactList))
41
42    // Checking if Spider Man is deleted or not
43    _, ok := contactList["Spider Man"]
44    if !ok {
45        fmt.Println("Spider Man is deleted")
46    }
47 }

Review

On line 36 we check the length of map.

1
fmt.Println("Length: ", len(contactList))

We can delete values from our map using 'delete' as on line 39.

1
delete(contactList, "Spider Man")

On line 43 we check if the key is present in the map or not, it returns a boolean value, 'true' if the key is present and 'false' if not found.

1
_, ok := contactList["Spider Man"]

Full Code

slice.go
package main

import "fmt"

func main() {
    // Let's make contact list with names & phone numbers
    // Initialize a map 'contactList'
    contactList := make(map[string]int)
    // Adding values to map
    contactList["Iron Man"] = 878111222
    contactList["Thor"] = 121131141
    contactList["Batman"] = 483910138
    contactList["Spider Man"] = 478282929

    // print out the map
    for key, value := range contactList {
        fmt.Printf("Key = %s\tValue = %d\n", key, value)
    }
    fmt.Println("")
    // Iron man decides to change his number
    contactList["Iron Man"] = 333333333
    fmt.Printf("The new contact no of Iron Man is: %d\n", contactList["Iron Man"])
    fmt.Println("")
    // Now Hulk wants to join the team
    contactList["Hulk"] = 911831925

    // New team is
    for key, value := range contactList {
        fmt.Printf("Key = %s\tValue = %d\n", key, value)
    }

    /*
        Operators in maps
    */
    // Length of our super hero team
    fmt.Println("Length: ", len(contactList))

    // Siper man is not performing well and we need to delete him
    delete(contactList, "Spider Man")
    fmt.Println("Length: ", len(contactList))

    // Checking if Siper Man is deleted or not
    _, ok := contactList["Spider Man"]
    if !ok {
        fmt.Println("Spider Man is deleted")
    }
}

Running your code

Open your terminal and navigate to our folder

1
code/basic/13_map/

Once in the folder type the following command

1
go run maps.go

Output

If there are no errors, you should get the output as:

Output
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
Key = Iron Man  Value = 878111222
Key = Thor      Value = 121131141
Key = Batman    Value = 483910138
Key = Spider Man        Value = 478282929

The new contact no of Iron Man is: 333333333

Key = Iron Man  Value = 333333333
Key = Thor      Value = 121131141
Key = Batman    Value = 483910138
Key = Spider Man        Value = 478282929
Key = Hulk      Value = 911831925
Length:  5
Length:  4
Spider Man is deleted

If for some reason your code isn't working, checkout the github repo or playground.

Github

Github Repo

Golang Playground

Golang Playground

Next

In the next chapter we will study Struct.

Buy Me A Coffee

Buy Me A Coffee