ざっくりまとめです。
サンプルコード
こちらを使用して紹介していきます
package main
import (
"fmt"
)
func main() {
fmt.Println(adder(1, 2))
}
func adder(a, b int) int {
return a + b
}
go run
binaryファイルを作成せずに実行することができる
$ go run main.go
3
go build
binaryファイルを作成する
$ go build main.go
## 実行成功すると何も表示されない
## mybinaryみたいなものが生成される
$ ./mybinary
3
クロスコンパイルも容易にできる
例えばLinux用に配布したい場合
$ GOOS=linux GOARCH=amd64 go build main.go
## 同じようにmybinaryが生成される
go clean
buildとかtestとかで出力したものを削除してくれる
_obj/ Makefilesにより残された、古いオブジェクトディレクトリ
_test/ Makefilesにより残された、古いテストディレクトリ
_testmain.go Makefilesにより残された、古いgotestファイル
test.out Makefilesにより残された、古いテストログ
build.out Makefilesにより残された、古いテストログ
*.[568ao] Makefilesにより残された、古いオブジェクトファイル
DIR(.exe) go buildから生成
DIR.test(.exe) go test -cから生成
MAINFILE(.exe) go build MAINFILE.goから生成
*.so SWIGから生成
go test
_test.go
というファイルのテストを実行してくれる
$ go test -v .
=== RUN Test_adder
=== RUN Test_adder/ok
--- PASS: Test_adder (0.00s)
--- PASS: Test_adder/ok (0.00s)
PASS
ok path/to/mybinary 0.006s
test単体でも実行可能
$ go test -run Test_adder
=== RUN Test_adder
=== RUN Test_adder/ok
--- PASS: Test_adder (0.00s)
--- PASS: Test_adder/ok (0.00s)
PASS
ok path/to/mybinary 0.006s
option 一部
-
-parallel n
- テスト関数の並行実行がこれにて可能
- n並行数を決められる
-
-timeout t
- テストがtよりも長く実行している場合、panic強制的にpanicを起こす
-
-memprofile mem.out
- 全てのテスト完了後に指定したファイルにメモリプロファイルを残す事ができる
-
-benchmem
- ベンチマークのためのメモリ割り当てを出力する
go get [option] package
-
-u
- 常に最新の状態をダウンロードする
- つけない場合はローカルにないもののみをダウンロード
-
-t
- ダウンロード後ビルド前にテストを実行してくれる
- 失敗した場合はビルドしないようになる
go generate
// go:generate go get -u package
package main
上記のようにコメントしておくとgenerate以下のコマンドを実行してくれる。
Makefileとかと組み合わせると便利っすね
# ビルドした後に実行とか
build:
go build
./mybinary
# 依存関係ツールとか使ってない人はこんな感じにしておくとか
deps:
go get -u path/to/~~~
go get -u path/to/~~~
go get -u path/to/~~~
# テスト実行
test:
go test -v .
# カバレッジの計測
covarage:
go test -v . -coverprofile=cover.out
go tool cover cover.out
まとめ
結論Godocをしっかり読めよって話。
Goコマンド関連に限らずGodoc読むことが大事だね