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が便利らしいけど、まだ触ってないので触りたい