Edited at

golangの開発で使っている色々

More than 1 year has passed since last update.


この記事について

アイスタイルアドベントカレンダー2016の9日目の記事です

golangについて書きますよ


初めに

弊社では主にphpで開発が行われていますが、一部でgolangやscalaの導入も始めています。

(ちなみに去年の時点での比率はこんな感じ

今回はgo開発で利用しているツール/ライブラリをいくつか紹介をさせて頂きます。


WebFramework

担当プロジェクトではlabstack/echoを利用しています。

こちらは社内の利用実績があった事で採用したというのが大きいのですが個人の感想は以下な感じです


良い所


  • Middlewareがある

  • 開発が活発

  • 名前が発音しやすい


つらい所


  • Loggingの拡張がちょっと面倒

  • 開発が活発なのでガンガン変わってく

その他にルーティグの書き方が凄くシンプルに書けるので気に入っています。

以下のように書く事ができます。

e := echo.New()

v1 := e.Group("/v1")
{
// GET /v1/cats
v1.GET("/cats", func(c echo.Context) error {
})
}
e.Logger.Fatal(e.Start(":1323"))


テスト

golangでは標準パッケージでテストをサポートしているため

それを利用するだけでも充分にテストを書くことは出来るのですが

自然言語でテストの内容を表現したい時にはonsi/ginkgoを利用しています。


サンプル

var _ = Describe("SearchCatAction", func() {

Context("type = 1 でリクエストする", func() {
cat := SearchCatAction(1)
It("三毛猫が返却される", func() {
Expect(cat).To(Equal("三毛猫"))
})
})
Context("type != 1 でリクエストする", func() {
cat := SearchCatAction(0)
It("いないよ!が返却される", func() {
Expect(cat).To(Equal("いないよ!"))
})
})
})

こちらは標準テストフォーマットからginkgoのテストフォーマットへの変換機能もある為、

標準テストからの切り替えもスムーズに行えるかと思います。


APIドキュメント

どんな開発でもドキュメント管理はつきものですが管理が疎かになりがちです。

担当プロジェクトでは実装とドキュメントの更新を統一的に進めていく補佐として

yvasiyarov/swaggerを利用しています。

こちらのライブラリはアノテーションを元にswagger形式のドキュメントを生成してくれます。

記述例

// @APIVersion 1.0.0

// @APITitle catAPI
// @APIDescription catAPIだよ

package main

func main() {
//API実装
}

エンドポイントの例

// SearchCatAction 猫検索
// @Title 種別名検索API
// @Description 種別IDを入力すると種別名を返却します
// @Param type query int true "猫ID"
// @Success 200 {object} string "種別名"
// @Resource /cat
// @Router /v1/cat/images [get]
func SearchCatAction(string catType) {
}

ドキュメントの生成コマンド

go get github.com/yvasiyarov/swagger

swagger -apiPackage="cat" -mainApiFile="cat.go"

上記を行うとswagger形式のフォーマットで記載されてdoc.goというファイルが生成されます。

このファイルを元にWebブラウザからAPIドキュメントを参照出来るようにしています。


まとめ

go開発で利用しているライブラリ/ツールを紹介しました

社内外問わず、goの利用が拡大していけば嬉しいです。

なお、ここで利用しているサンプルコードはここに公開しています。


明日は

kubotak氏の記事です!

今年もフロントエンドの何かを書くそうです。お楽しみに!!