2013年10月27日日曜日

Golang Cafe #1を開催しました。

今日は、Golangをみっちりやるという目的で、Golang Cafe #1を開催しました。

内容は、最初なのでHow to Write Go Codeの内容を中心に進めました。

順番は、

  1. 今後のために、Workspaceの構築
  2. パッケージについて
  3. Your First Program
  4. Goコマンドについて
    1. go build
    2. go install
  5. go test
    1. TestXxx()
    2. BenchmarkXxx()
    3. ExampleXxx()
注目のポイントとしては、まず、パッケージについて。

  1. 基本的にソースコードのパッケージ名とディレクトリ名が一致している必要がある。
  2. mainが含まれるパッケージ(コマンドのプログラム)には、mainパッケージしか配置できない。
  3. mainから他のパッケージを参照する事は可能。
    1. したがって、自作の外部パッケージは別のディレクトリで作成する。
    2. 参照する時はWorkspaceのsrc以下のディレクトリ構成をフルパスで指定する感じの記述が必要
      1. ex) sample.com/firstlib/sublib
      2. ex) sample.com/firstlib
      3. など。
  4. サブディレクトリにパッケージを作成する事が可能。
  5. go buildでは自作パッケージ(≠コマンドのプログラム)は-oオプションがない限り、何も出力されない。
  6. go installで、pkgディレクトリにコンパイル後のライブラリファイルが出力される。
  7. go install は、パッケージを省略すると、カレントディレクトリのパッケージのビルドを行う。特定のパッケージをインストールする場合は、パッケージ名を絶対パス指定するか、相対パス指定する。
  8. go installはコマンドとライブラリで出力先が自動的に切り替わるのでコマンドの違いはない。
次に、go testについて

  1. go testコマンド
    1. ユニットテストを行う場合
      1. テストコードはtestingパッケージを利用する
      2. ファイルの置き場所はパッケージのソースコードと同じ場所に置く。
        1. ファイル名はXXX_test.goとする。(自動的にテストコードと認識される)
      3. テストコードの関数はTestXxx(t *testing.T)とする。
        1. 先頭はTestで始まる関数を自動的に読み取ってくれる。(JUnit3と同じ)
        2. Xxxの所はテスト対象の関数名にする。(任意ではあるがわかりやすい?)
    2. ベンチマークを取る場合
      1. テストコードと一緒に記述すれば良い。
      2. ベンチマークの関数名はBenchmarkXxx(b *testing.B)とする。
        1. 自動的に読み取ってくれる。
        2. Xxxの所は対象の関数名にする(ユニットテストと同じ)
      3. コマンドパラメータが必要。指定がなければ実行されない。
        1. go test -bench .
        2. go test -bench=".*"
    3. Exampleコードを作成する場合
      1. テストコードと一緒に記述する。
      2. Exampleの関数名はExampleXxx()とする。
        1. 自動的に読み取ってくれる。
        2. Xxxの所は対象の関数名にする(ユニットテストと同じ)
      3. 関数の最後に、特殊なコメントが必要。なければ実行されない。
        1. // Output: で始まる。(これが無いと実行されない)
        2. 以降、標準出力に出力される文字列をコメントで記述。
        3. 標準出力には、自分で出力するようにコードを書く必要がある。
        4. 用途が不明。(簡単なユニットテスト?)
    4. 複数のパッケージを一気にテストする場合。
      1. go test [パッケージ名を空白で区切って羅列する]
      2. 相対指定も使える。
      3. ちょっと面倒だけど、シェルなどを使って、文字列を作るしか無さそう。
      4. ディレクトリを指定するとかでは実行できなかった。
    5. go testのコマンドパラメータについては、ドキュメントを参照。
ということで、今回は3名で集まって、中身を進めました。
(本日のお題を用意していたので、Google Documentですが、URLを置いておきます。
http://goo.gl/iVLEXf
今後は、Go Playgroundにソースを貼って動かして動作を確認も良いのですが、
テストコードを書いて動作を確認して進めてみようと思っています。

それから、基本的には毎週日曜日に気が済むまでやってみたいと思います。