エンジニアはこわくない

自分の好きな音楽とか雑記とかエンジニアっぽい内容を好きなように書く場所。

golangでディレクトリまるごとgo vet&testしたいとき!

f:id:tsujitaku50:20170224131252j:plain

golangを書いているとコード担保のために

go testコマンドやgo vetコマンドをしますよね??

僕はjenkinsで自動テストをしているのですが、そのときにディレクトリ(プロジェクト)まるごと

go testコマンドやgo vetコマンドしたいときってどうするんだ?

と思ったので調べました!

小技だと思いますが、知っといて損はないかと思います。

結論

結論から書くと以下のコマンドで実現できます!

# cdコマンドで対象ディレクトリ(プロジェクト)に移動

# vetしたいとき
go vet ./...

# testしたいとき
go test ./...

./...というのがミソで、このコマンドがプロジェクト(ディレクトリ)まるごと指定しているようです。

実際にやってみた

6ファイルほどgoファイルがあるプロジェクトを対象にvetしたいと思います。

今回は検証のためにわざとmain2.goとmain3.goにエラーが起こるようにしています。

# ファイル構成の確認
[~/Documents/workSpace_intellij/go-sample] 
% tree                                                           (git)-[master]
.
├── README.md
├── main.go
├── main_1.go
├── main_2.go
├── main_3.go
├── main_4.go
└── main_5.go

# ディレクトリ(プロジェクト)まるごとvet
% go vet ./...                                                   (git)-[master]
main_2.go:82: unreachable code
main_3.go:16: struct field tag `json:text` not compatible with reflect.StructTag.Get: bad syntax for struct tag value
exit status 1

期待通りにmain2.goとmain3.goにエラーが起こりましたね!

想定どおり全てのファイルにvetがかかっています。

おわり!!