I am learning to use the map of maps. In the following example, there are three nested maps.

package main import ( "fmt" ) func main() { var data = map[string]map[string]map[string]string{} data["Date_1"] = map[string]map[string]string{} data["Date_1"] = make(map[string]map[string]string, 1) data["Date_1"] = make(map[string]map[string]string, 0) data["Date_1"]["Sistem_A"] = map[string]string{} data["Date_1"]["Sistem_A"] = make(map[string]string, 0) data["Date_1"]["Sistem_A"] = make(map[string]string, 0) data["Date_1"]["Sistem_A"]["command_1"] = "white" data["Date_1"]["Sistem_A"]["command_2"] = "blue" data["Date_1"]["Sistem_A"]["command_3"] = "red" fmt.Println("data: ", data) } 

Output

data: map[Date_1:map[Sistem_A:map[command_1:white command_2:blue command_3:red]]] 

The problem is that if I want to add the values ​​in one step I get a panic: assignment to entry in nil map.

package main import ( "fmt" ) func main() { var data = map[string]map[string]map[string]string{} data["Date_1"] = map[string]map[string]string{} data["Date_1"] = make(map[string]map[string]string, 0) data["Date_1"] = make(map[string]map[string]string, 0) data["Date_1"]["Sistem_A"] = map[string]string{} data["Date_1"]["Sistem_A"] = make(map[string]string, 0) data["Date_1"]["Sistem_A"] = make(map[string]string, 0) data["Date_1"]["Sistem_A"]["command_1"] = "white" data["Date_1"]["Sistem_A"]["command_2"] = "blue" data["Date_1"]["Sistem_A"]["command_3"] = "red" data["Date_2"]["Sistem_A"]["command_5"] = "violet" fmt.Println("data: ", data) } 

Output

panic: assignment to entry in nil map 

There is very little guidance information at this point. Could you help me?

Thank you.

2 Answers

It is here:

 data["Date_2"]["Sistem_A"]["command_5"] = "violet" 

The expression data["Date_2"] will return a nil-map. It is never initialized, so looking for the index ["Sistem_A"] panics. Initialize the map first:

 data["Date_2"] = make(map[string]map[string]string) data["Date_2"]["Sistem_A"] = make(map[string]string) data["Date_2"]["Sistem_A"]["command_5"] = "violet" 
5

Your problem is, that you never initialized data["Date_2"] (so it is nil).

So by doing data["Date_2"]["Sistem_A"]["command_5"] = "violet", looking for the index panics.

you have to initialize first as follows:

data["Date_2"]=make(map[string]map[string]string) data["Date_2"]["Sistem_A"]=make(map[string]string) 
0

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy