reflect pkgを使った方法
最初はなんとなくリフレクションを使ってやるのかなぁと思って、調べてたらこんな感じのが出てました。(参考リンク)
http://play.golang.org/p/5Inl2jO7zL
encoding/json pkgを使った方法
ただちょっとこれだと扱いにくくて(MapToStructの中身を修正すれば扱いやすくなるかもしれないですが)、パフォーマンスを気にしなければ、mapを一旦JSONにして、そのJSONをstructにするという方法が扱いやすいということを教えてもらいました。
http://play.golang.org/p/Kd7TRoRG5w
ライブラリmapstructureを使う方法
https://github.com/mitchellh/mapstructure
mapstructure.Decode関数を使えばよさげ。
補足:mapから map[string]interface{}に変換する方法
最初は、MapToStructの第一引数にmap[string][]stringをそのまま渡してて、valueのところがスライスだったらだめなのかな?と思ってましたが、map[string]interface{}に変換すればいいだけってのを教えてもらって、次のような変換で解決しました。
補足:個人的なきっかけ
POSTリクエストがきた時のr.Formを構造体に一時的に格納したいのですが、格納先の構造体のフィールドがやたら多い場合、一個ずつ格納するのが面倒だなというのがきっかけでした。
参考
- how to convert map to struct – Google グループ
- Ideone.com – XWtlo – Online Go Compiler & Debugging Tool(これはGo1以前のソースなのでそのままでは動かない)
- struct <-> map[string]interface{} conversion – Google グループ