Get started with GoLang maps: A tutorial

An important part of programming with GoLang is working with maps. In this GoLang maps tutorial, we’ll demonstrate the value of maps and show you how you can integrate them into your programs.

What are GoLang maps?

A map has a key and a value. The value can be any value, such as another map. For example, here is a map of strings with a key of type int and value string. You use the make command to instantiate the map.

people := make(map[int]string)
people[1] = "Walker"

Here is a complete example. In this case, we’ll declare and then instantiate the GoLang map in two steps. Then, we use the GoLang range operator to loop over each key and retrieve the value by index. Then we print it out.

package main
import "fmt"

func main() {
  var pLangMap map[string]string

  pLangMap = make(map[string]string)

  pLangMap["Go"] = "Easy"
  pLangMap["Python"] = "Easy"
  pLangMap["Scala"] = "Difficult"
  pLangMap["Java"] = "Moderate Difficult"
  pLangMap["C++"] = "Difficult"

  for lang := range pLangMap {
    fmt.Println("How Difficult is", lang, pLangMap[lang])
  }

}

Here is the output. Notice that the keys are printed out of order. This is because Golang is multithreaded and asynchronous.

How Difficult is Scala Difficult
How Difficult is Java Moderate Difficult
How Difficult is C++ Difficult
How Difficult is Go Easy
How Difficult is Python Easy

Sorting GoLang maps

To sort the map items, we cannot simply use sort.Strings since the key is not a string.

sort.Strings(pLangMap)

cannot use pLangMap (type map[string]string) as type []string in argument to sort.Strings

So let’s make a new map whose key type is an array of strings []string and has an arbitrary value: we use len(map) which is the number of elements in the map. Then, we plug the value into the key and sort on the key with sort.Strings.

func main() {

  var pLangMap map[string]string

  pLangMap = make(map[string]string)

  pLangMap["Go"] = "Easy"
  pLangMap["Python"] = "Easy"
  pLangMap["Scala"] = "Difficult"
  pLangMap["Java"] = "Moderate Difficult"
  pLangMap["C++"] = "Difficult"

  mk := make([]string, len(pLangMap))
  i := 0
  for k, _ := range pLangMap {
    mk[i] = k
    i++
  }
  sort.Strings(mk)
  fmt.Println("How Difficult is", mk)
}

Now the elements are printed in order.

How Difficult is [C++ Go Java Python Scala]

Retrieve Value

Here is how to retrieve a map value.

pLangMap["Go"] = "Easy"
x := pLangMap["Go"]
fmt.Println("How Difficult is", x)

Test for a Key

To test for a key, use the underscore (_) to retrieve a value without using it. If we put some placeholder there like, for example, v, then Go would complain that we are declaring a value but not using it. If the key is not there, then the boolean ok will be equal to false.

_, ok := pLangMap["Got"]

if ok == false {
  fmt.Println("Got not found")
}

Map of Structs

Here we create a map of a struct of type students then print each student name:

package main

import "fmt"

type student struct {
  name string
  class string
  grades string
}

func main() {

  var students map[int]student
  students = make(map[int]student)
  students[1] = student{"Walker", "calculus", "A"}

  for k, v := range students {
    fmt.Println("key=",k, " name=" , v.name)
  }
}

Outputs:

key= 1 name= Walker

As you can see, GoLang maps are incredibly easy to work with, and it’s a simplicity that extends throughout the language, which is why GoLang is becoming an increasingly popular web programming language.

If you are interested in following along with this GoLang maps tutorial, you can paste the code provided below into the GoLang Playground.

App Architecture
Software Quality
Cloud Computing
Security
SearchAWS
Close