標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

*_test.go を使わないテストコードとかサンプルコード

以下はどこかの記事を読んで知った方法なのだが、どこだったかわからなくなってしまったので、改めてここに記す(つまり、自分が考えついた方法ではない)

*_test.go を使わないテストコードとかサンプルコードを書きたい時どうするか。

普通は別フォルダーに main パッケージを作って、そこに書く。が、いちいちフォルダーを分けていたら、フォルダーツリーが無駄に複雑になってしまう。

だが、サンプルコードを go run でしか使わないという縛りにすれば、同じフォルダーにそのサンプルコードのソースを混ぜておくことができる。そのためにはサンプルコードを以下のような形で始めればよい。

~/go/src/github.com/zetamatta/orelib/example1.go

// +build run

package main

import (
    _ "github.com/zetamatta/orelib"
)
// :以下省略

先頭に // +build run があるため、このソースファイルは go build の処理対象外になる(処理対象に入れるには go build -tags=run としないといけない)。だが、go run bar.go する分には // +build run による無効化は通じない。

それゆえ:

  • 被テストパッケージのビルドは go build (パッケージには example1.go は含まれない)
  • テスト実行は go run example1.go

と使い分けが効き、同一フォルダーにパッケージコードとサンプルコードを共存することができるというわけだ。