ordered map という適当な粒度の課題
1時に寝て4時に起きて CPAP 治療忘れて寝ていたことに気付いて、装着してまた寝て6時半に起きた。
今日の運動は背筋をした。統計を 運動の記録 にまとめる。
orderedmap ライブラリ⌗
json のオブジェクトの属性を意図した順番に並び替えたいという要件があって 適当なライブラリをみつけられなくて 最終的には自分で実装した。そのときに参考にしたモジュールではネストした配列やオブジェクトの順番を維持できないことに気付いて、どうせ実装するなら json の marshal/unmarshal の処理を完璧に実装しようと思って、再度フルスクラッチで作り直した。要は python の OrderedDict のようなものの go 版になる。
orderedmap
というキーワードで検索するといくつもオレオレの実装がみつかる。次の3つを参考にしながら、私も自分の思う「ぼくのかんがえたさいきょうの orderedmap」 を作ってみた。
- https://github.com/iancoleman/orderedmap
- https://github.com/elliotchance/orderedmap
- https://github.com/mroth/orderedmap
実際に作ったものが次になる。
インストール
$ go get -u github.com/kazamori/orderedmap
go のモジュールは GOPROXY protocol を介してプロキシサーバーから取得される。デフォルトでは proxy.golang.org
が設定されている。
$ go env | grep GOPROXY
GOPROXY='https://proxy.golang.org,direct'
プロキシサーバーではモジュールがキャッシュされているため、利用する側でリビジョンを更新しようとしても短い間隔だとすぐには反映されない。プロキシサーバーに存在しないモジュールのリビジョンを取得したい場合は GOPROXY
の環境変数でダイレクトモードに変更する。
$ GOPROXY=direct go get -u github.com/kazamori/orderedmap
generics 対応して汎用の map を扱えるのがちょっとお気に入りなところ。他人が作ったライブラリを使うことはできるけど、プログラミング勉強として自分で実装してみるのもよい気はする。ちょうど kyoto.go のイベントがあってそのトークに orderedmap について話して来ようと思う。