kobakei's blog

プログラミングの話や技術系イベントの話をゆるく書くブログです

Goで匿名ダイアリーもどきを作ってみた

完全に趣味ですが、Goに入門しました。 匿名ダイアリーもどきのアプリケーションを作るとこまでできたので、ここまでに学んだことをメモ。 http://golang-jp.org/doc/に十分まとまっていますがね。

作ったアプリ github.com

※環境はOSXです

インストール

brewでさくっと入れました。執筆時点のバージョンは1.7.4.

brew install go

Goは$GOPATHという環境変数ワークスペースを指定します。また、$GOPATH/binにバイナリが配置されますので、.bash_profileに以下を追加。

export GOPATH="$HOME/go"
export PATH="$GOPATH/bin:$PATH"

コーディングスタイル

goは公式のスタイルが厳格に決まっていて、gofmtなるフォーマットツールも付属しているらしい。

以下のコマンド一発でフォーマットしてくれるので、git hookとかで強制的にフォーマットするとよさそう。

gofmt -w .

パッケージマネージャ

Goではライブラリはワークスペースにgetしてきたものが使われるんですが、複数のマシンで開発するときはやっぱバージョン固定したいですよね。

パッケージマネージャは色々ありますが、glideかgovendorがナウい感じ? gom, godepなどもあるみたいだけど、後述するEchoではglideとgovendorが紹介されてました。

特に強い理由はないけど、なんとなく今メジャーっぽいというだけでglideを採用。 バージョンをyamlで管理してくれます。

brew install glide

glide init
glide install
glide get github.com/hogehoge/fugafuga

WAF

RubyにおけるRailsのような、とりあえずこれ使おう的なものはまだない印象。そもそも重量級フレームワークとかを使って黒魔術ゴリゴリで書く言語ではなさそう。

  • Echo
  • Gin
  • Revel

など色々あります。開発の活発さとドキュメントの充実具合で、Echoを採用しました。

テンプレートエンジン

「標準のhtml/templateパッケージで十分」とどこかで見かけたので、これしか試してない。

ORM

WAFに同じく、あんまりGoだと使わないのかなー。デファクトスタンダードなものはなさそう。

  • gorm
  • gorp

などがあり、gormを採用しました。この選択はあまり自信ないです。

テスト

標準のtestingパッケージを使って書けばOK

所感

  • 「今風なC++」を書いている感覚
  • コンパイル言語でwebアプリを書くの初めてなので新鮮
    • 文法エラーとかビルド時に教えてくれて嬉しい
    • ちょっとした修正でもビルドが走るからtry and errorに時間かかってる。auto reload的なのあるのかな?
  • 言語仕様が引き算で考えられていて覚えやすい
  • 並列処理のgoroutineが便利らしいけど、まだ触ってないので触りたい