#golang mapからstructに変換するには?

Posted by kwmt on Sat, Oct 12, 2013

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 グループ


comments powered by Disqus