csvをGoの構造体にマッピングする
Goでcsvを扱う際は、標準パッケージのendording/csvで対応できますが、いちいちスライスを扱うのは少しつらいものがあります。
大抵の場合構造体にマッピングした方が扱いやすいため、その方法を紹介していこうと思います。
csvマッピングライブラリはjszwec/csvutilやgocarina/gocsvがありますが、今回は前者を使っていきます。
mapperの定義
User struct { ID int `csv:"id"` Name string `csv:"name"` }
以下のuser.csv
を読み込みます。
id, name 1, nakabonne 2, ryo nakao
Unmarshal
var users []User // バイト列を読み込む b, _ := ioutil.ReadFile("user.csv") // ユーザー定義型スライスにマッピング _ := csvutil.Unmarshal(b, &users)
Marshal
// ユーザー定義型スライスの作成 users := []User{ {ID: 1, Name: "nakabonne"}, {ID: 2, Name: "ryo nakao"}, } // バイト列に変換 b, err := csvutil.Marshal(users)