Nested Maps in Golang

Create new folder named src. In src folder, create new file named main.go as below:

package main

import "fmt"

func main() {
	fmt.Println("Demo 1")
	Demo1()

	fmt.Println("Demo 2")
	Demo2()

	fmt.Println("Demo 3")
	Demo3()

	fmt.Println("Demo 4")
	Demo4()
}

func Demo1() {
	categories := map[string][]string{
		"category1": []string{"product 1", "product 2"},
		"category2": []string{"product 3", "product 4", "product 5"},
		"category3": []string{"product 1"},
	}
	fmt.Println(categories)
	fmt.Println("Categories List")
	for key, value := range categories {
		fmt.Println(key)
		for _, v := range value {
			fmt.Println("\t", v)
		}
	}
}

func Demo2() {
	categories := make(map[string][]string)

	categories["category1"] = append(categories["category1"], "product 1.1")
	categories["category1"] = append(categories["category1"], "product 1.2")
	categories["category1"] = append(categories["category1"], "product 1.3", "product 1.4")

	categories["category2"] = append(categories["category2"], "product 2.1", "product 2.1")

	fmt.Println(categories)
}

func Demo3() {
	categories := map[string][]string{
		"category1": []string{"product 1.1", "product 1.2", "product 1.3"},
		"category2": []string{"product 2.1", "product 2.1"},
	}
	fmt.Println(categories)
	for _, category := range categories {
		fmt.Println(category)
		for _, name := range category {
			fmt.Println("\t", name)
		}
	}
}

func Demo4() {
	products := map[string]map[string]interface{}{
		"product1": map[string]interface{}{
			"id":       "p01",
			"name":     "name 1",
			"price":    4.5,
			"quantity": 10,
		},
		"product2": map[string]interface{}{
			"id":       "p02",
			"name":     "name 3",
			"price":    6,
			"quantity": 4,
		},
		"product3": map[string]interface{}{
			"id":       "p03",
			"name":     "name 3",
			"price":    13,
			"quantity": 9,
		},
	}
	fmt.Println(products)
	for _, product := range products {
		fmt.Println("Info of ", product["name"])
		for key, value := range product {
			fmt.Println(key, ":", value)
		}
		fmt.Println("----------------------")
	}
}




Open Terminal windows in Visual Studio Code and run command line: go run main.go

Demo 1
map[category2:[product 3 product 4 product 5] category3:[product 1] category1:[product 1 product 2]]
Categories List
category1
         product 1
         product 2
category2
         product 3
         product 4
         product 5
category3
         product 1

Demo 2
map[category1:[product 1.1 product 1.2 product 1.3 product 1.4] category2:[product 2.1 product 2.1]]

Demo 3
map[category1:[product 1.1 product 1.2 product 1.3] category2:[product 2.1 product 2.1]]
[product 1.1 product 1.2 product 1.3]
         product 1.1
         product 1.2
         product 1.3
[product 2.1 product 2.1]
         product 2.1
         product 2.1

Demo 4
map[product1:map[id:p01 name:name 1 price:4.5 quantity:10] product2:map[quantity:4 id:p02 name:name 3 price:6]
product3:map[id:p03 name:name 3 price:13 quantity:9]]
Info of  name 1
id : p01
name : name 1
price : 4.5
quantity : 10
----------------------
Info of  name 3
id : p02
name : name 3
price : 6
quantity : 4
----------------------
Info of  name 3
quantity : 9
id : p03
name : name 3
price : 13
----------------------