経緯
先日のGoConではGengoさんが自社のAPIサーバの概要を紹介してらっしゃったので、弊社もAPIサーバの構成の紹介をしていきたいと思います。第一回は利用しているライブラリの紹介をさせていただきます。
ライブラリ一覧
ひとまず使ってるものを列挙させていただくと以下のようになっています。
- zenazn/goji
- guregu/null
- guregu/toki
- guregu/clock
- unrolled/render
- guregu/mogi
- go-redis/redis
- guregu/buildver
- y-matsuwitter/fluent-logger-golang
弊社エンジニアgregの自作ライブラリが多く使われてます。
zenazn/goji
gojiはmartiniライクなサーバ用ライブラリです。
最近は日本でも人気になってきました。
gojiとmartiniの一番大きな違いを上げるとgoji is not a magick.
という一文に尽きると思います。
reflectパッケージなどを使わずシンプルに書かれており、martiniの使いやすさと遜色なく、パフォーマンスも高いものとなっています。
unrolled/render
MartiniのRenderを参考に実装されたHTTPのレスポンスを組み立ててくれるライブラリです。JSON, HTML, XMLあたりに対応している模様です。
go-redis/redis
Redisのライブラリです。redigo
の方が有名かもしれませんが、個人的にはこちらの方が書き方が好きなのでこちらを利用しています。
guregu/null, guregu/toki
こちらはsqlのnull値や時刻をJSONに変換する際に、null値や空文字、指定のフォーマットに変換する際に便利なライブラリです。
https://github.com/guregu/null
https://github.com/guregu/toki
guregu/clock
こちらのclockは現在時刻を内部で使うような関数がある場合に、テストしやすいようmock化するものです。
guregu/mogi
こちらはSQLのスタブライブラリです。下記のように非常に直感的な書き方ができます。詳細は本人がそのうち紹介してくれると思うので、省きます。
mogi.Select("id", "name", "brewery", "pct").
From("beer").
Where("id", 1).
StubCSV(`1,Yona Yona Ale,Yo-Ho Brewing,5.5`)
guregu/buildver
アプリのバージョン番号を比較するためのユーティリティになります。
社内だと通常のストア用のバージョン番号では1.1.1
のように3つ、iOSのビルド番号を1.1.1.1
の用に4つの数字で表現するので、これらで正しくバージョン比較を行うために作成されています。
y-matsuwitter/fluent-logger-golang
Fluentロガーです。特に説明するものはありません。
最後に
振り返ってみると、思ったよりも使ってるライブラリは少なかったです。
よく勉強会でも話しているのですが、Goは標準ライブラリが充実しているため、それほど外部のライブラリに依存すること無く、割と規模の大きいサーバでも構築しやすいと言うのがよいとこだと思っています。
単にライブラリ紹介するだけだと面白みがないので、今後Go開発の社内のやり方などを共有させていただきます。