59
55

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GoのAPIサーバで使っているライブラリの紹介

Posted at

経緯

先日の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開発の社内のやり方などを共有させていただきます。

59
55
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
59
55

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?