はじめに
こんにちは、Go界の木村功です。このエントリはPySpaアドベントカレンダーの20日目の記事です。
「最近Goを書いてるよ」と言うとGoがまだVersion 1.0になる前にちょっと触った時の印象で反応される方がちょいちょいいるので、いまからGoを始める場合のメモを残しておきます。
言語チュートリアル系
チュートリアル動画
これをひと通り見ておけば必要な環境が設定できます。
インタラクティブチュートリアル
とりあえず文法を覚えたいのであれば、GoをインストールしなくてもA Tour of Goをやっとけば良いと思います。
- A Tour of Go
Go Playground
JavaScriptで言うところのjsdo.itやjsFiddleのようなものです。ブラウザ上でGoの標準パッケージだけで書ける範囲のコードを色々と試して、そのコードをシェアも出来るという環境です。A Tour of Goが終わった後に更にちょっと遊んでみたいだけであればこれで十分。A Tour of Goで使っているものと同じ仕組みです。
環境設定系
インストール
Go公式サイトのGetting Startedにまとまっています。
特に設定で気をつけるのは次の環境変数くらいだと思います。
- GOROOT: Goの実行バイナリをインストールする先のターゲットディレクトリ
- GOPATH: 開発時のルートディレクトリ
ワークスペース
Goで何かを書き始める場合はプロジェクトごとにワークスペースを分けて、そこにGOPATHを通しておきます。詳しくは次のリンク参照。
下の例の場合は GOPATH=path/to/project になります。さらにワークスペースの中にsrcディレクトリを切って、その中でコードを書いていきます。go getとかしたコードもこのsrcディレクトリの中にダウンロードされます。GitHubに登録するのもこのsrcディレクトリだけです。
% tree path/to/project path/to/project ├── README ├── src/ │ ├── main.go │ ├── github.com │ │ └── ymotongpoo │ │ └── spam │ ... ├── pkg/ └── bin/
ワークスペースに入ったらとりあえず次のコマンドを叩いておくと幸せです。
% godoc -http=":8000" &
これでhttp://localhost:8000にアクセスして実装中のコード含めてドキュメントが読めて、ローカルでの開発がはかどります。
パッケージ
Goはパッケージ管理レポジトリのようなもの*1がありません。ただ、Git、Mercurial、Bazaar、Subversionのレポジトリをgo getで直接引っ張ってこれるので、今のところは自分で頑張って探すというのが主流です。
とは言え、それはめんどくさいので、一応Goの3rd Partyライブラリがまとめられているサイトがあります。
データ処理系
Webアプリケーションの作成
Goは標準パッケージにHTTPサーバ、URLディスパッチャ、テンプレートエンジンを持っているので、DBの部分さえなんとか出来れば、バイナリ1個のWebアプリケーションを作ることも可能です。しかもそこそこ速い。
一応3rd Partyだけどそこそこ動くMySQLクライアントライブラリなんかはあります。
テスト
ユニットテスト
ユニットテストも標準パッケージでできます。xUnit形式のログが吐けないのでJenkins等との連携はめんどうかも。でもTravis-CIでも簡単にGoのテストを動かすことができます。またQuickCheckもどきも入っているので、ブラックボックステストも割と簡単にできます。
mock
インターフェースだったらgomockを使ってmockの作成が可能。
参考
参考にするサイトなど。
- Documentation - The Go Programming Language
- References - The Go Programming Language
- 公式サイトのDocumentsとReferencesにあるリンクはとりあえず目を通したほうが良いと思います
- nf (Andrew Gerrand) · GitHub
- nf.id.au - Andrew Gerrand's Blog
- GoogleのGo言語のDeveloper AdvocateのAndrewのGItHubとブログをガン見してます
- mattn (mattn) · GitHub
- Big Sky
- 日本人だとmattnさんのGitHubとブログをガン見してます
- I/O BootCamp 2011: Real World Go - YouTube
- Goが実際に使われている例とかが紹介されています
情報収集中なので、おそらくまだ加筆されます。