Go言語のmapでレコード追加したいのですが実行時エラーになってしまいうまくできません。
C++で行っている以下処理をGoでも行いたいのですがスマートな方法はどのようにするのがいいのでしょうか?
c++
1#include <map> 2#include <iostream> 3 4using namespace std; 5 6class DataOneDay { 7public: 8 int bgn1; 9 int end1; 10}; 11 12int main() { 13 14 map<int, map<int, DataOneDay> > list1; 15 int no = 1; 16 int tm1 = 2; 17 int tm2 = 3; 18 19 list1[no][tm2].bgn1 = tm2; 20 list1[no][tm2].end1 = tm1; 21 22 for(map<int, map<int, DataOneDay> >::iterator i = list1.begin(); i != list1.end(); i++){ 23 for(map<int, DataOneDay> ::iterator j = i->second.begin(); j != i->second.end(); j++){ 24 cout 25 << j->first << " " 26 << j->second.bgn1 << " " 27 << j->second.end1 << endl; 28 } 29 } 30 return 0; 31} 32 33
これをGoにすると以下の様になるかと思うのですが、どのように変更すればいいでしょうか?
Go
1package main 2 3import ( 4 "fmt" 5) 6 7type DataOneDay struct { 8 bgn1 int 9 end1 int 10} 11 12func main() { 13 14 var list1 map[int]map[int]DataOneDay 15 var rec2 map[int]DataOneDay 16 var rec1 DataOneDay 17 no := 1 18 tm1 := 2 19 tm2 := 3 20 21 list1[no] = rec2 22 list1[no][tm2] = rec1 23 24 rec1 = list1[no][tm2] 25 rec1.end1 = tm1 26 rec1.bgn1 = tm1 27 list1[no][tm2] = rec1 28 29 for key1,value1 := range list1 { 30 for key2,value2 := range value1 { 31 fmt.Printf("%d %d %d\n", key1, value2.bgn1, value2.end1) 32 } 33 } 34} 35
エラーメッセージは以下になります。
panic: assignment to entry in nil map goroutine 1 [running]: panic(0x80e9460, 0x1830a108) /usr/local/go/src/runtime/panic.go:481 +0x326 main.main() /home/user01/golang/hello/str3.go:21 +0x7e exit status 2
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/15 15:35
2016/06/15 15:43