議事録のテンプレート的なことは、JSONで指定することにした。こんな感じ
{ "会議名": "セッション0312", "開催日時": "2019年3月12日(火)14:00 – 17:00", "場所": "本社10F会議室", "出席者": { "ABC": ["安倍", "麻生", "石田", "山下", "河野"], "XYZ": ["柴山", "根本", "吉川", "世耕", "石井"] }, "ToDo":[ "概算見積の準備(XYZ)", "稟議書の準備(ABC)" ], "決定事項": [ "検討の優先順位" ] }
さて、これをGoで読み込んでみる。Rubyで読むと単にHashになって返ってくるだけなんだけども、Goのスタイルはこれに対応する構造体を作るらしい。 なるほど。
とはいうものの、とりあえずmapに読ませてみる。
import ( "encoding/json" "fmt" "log" ) func main() { data := []byte( `{ "会議名": "セッション0312", "開催日時": "2019年3月12日(火)14:00 – 17:00", "場所": "本社10F会議室" }`) var m map[string]string err := json.Unmarshal(data, &m) if err != nil { log.Fatal(err) } for key, value := range m { fmt.Println(key, ":", value) } }
これで単純にvalueがstringのところは読めるみたい。うん。便利じゃん?
とはいえ、これでは全体は読めないのでこんな感じにしてみる。
func main() { data := []byte( `{ "会議名": "セッション0312", "開催日時": "2019年3月12日(火)14:00 – 17:00", "場所": "本社10F会議室", "出席者": { "ABC": ["安倍", "麻生", "石田", "山下", "河野"], "XYZ": ["柴山", "根本", "吉川", "世耕", "石井"] }, "ToDo":[ "概算見積の準備(XYZ)", "稟議書の準備(ABC)" ], "決定事項": [ "検討の優先順位" ] }`) type Meeting struct { Name string `json:"会議名"` Date string `json:"開催日時"` Room string `json:"場所"` Members map[string][]string `json:"出席者"` Todo []string `json:"ToDo"` Decisions []string `json:"決定事項"` } var m Meeting err := json.Unmarshal(data, &m) if err != nil { log.Fatal(err) } fmt.Println(m) }
うん、ちゃんとパース出来ているね。