go build / run / test
| 対応: | Go 1.0(2012) |
|---|
Goには開発でよく使う公式コマンドが揃っています。『go build』でコンパイル、『go run』で直接実行、『go test』でテスト実行、『go fmt』でコードフォーマット、『go vet』で静的解析を行えます。
構文
// ビルドして実行ファイルを生成する // go build // カレントパッケージをビルド // go build -o myapp main.go // 出力ファイル名を指定 // go build ./... // 全パッケージをビルド // ビルドせずに直接実行する(開発中に便利) // go run main.go // go run . // テストを実行する // go test ./... // 全テストを実行 // go test -v ./... // 詳細出力で実行 // go test -run TestXxx // 特定のテストだけ実行 // go test -cover // カバレッジを計測 // コードをフォーマットする(gofmtに準拠) // go fmt ./... // 静的解析で問題を検出する // go vet ./...
コマンド一覧
| コマンド | 概要 |
|---|---|
| go build | パッケージをコンパイルして実行ファイルを生成します。 |
| go run [file] | Goソースを直接実行します(一時ビルド後に実行)。 |
| go test | _test.goファイルのテストを実行します。 |
| go fmt | ソースコードをGoの標準スタイルにフォーマットします。 |
| go vet | バグになりやすいコードを静的解析で検出します。 |
| go install | パッケージをビルドしてGOPATH/binにインストールします。 |
| go doc [pkg] | パッケージのドキュメントを表示します。 |
| go env | Go環境変数を表示します。 |
| go clean | ビルド成果物やキャッシュを削除します。 |
| go version | Goのバージョンを表示します。 |
サンプルコード
sample_go_build_run.go
// --- ファイル: main.go ---
package main
import "fmt"
// Add は2つの整数を加算して返す
func Add(a, b int) int {
return a + b
}
// Greet は挨拶文字列を返す
func Greet(name string) string {
return "Hello, " + name + "!"
}
func main() {
fmt.Println(Add(3, 4))
fmt.Println(Greet("Go"))
}
// --- ファイル: main_test.go ---
// テストファイルは _test.go で終わる名前にする
/*
package main
import "testing"
// TestAdd はAdd関数のテスト
func TestAdd(t *testing.T) {
got := Add(3, 4)
want := 7
if got != want {
t.Errorf("Add(3, 4) = %d, want %d", got, want)
}
}
// TestGreet はGreet関数のテスト
func TestGreet(t *testing.T) {
got := Greet("Go")
want := "Hello, Go!"
if got != want {
t.Errorf("Greet(%q) = %q, want %q", "Go", got, want)
}
}
*/
// --- ビルドと実行の例 ---
// go run main.go で直接実行する
// 出力: 7
// Hello, Go!
// go build -o myapp でビルドする
// ./myapp で実行する
// go test -v でテスト実行する
// --- PASS: TestAdd (0.00s)
// --- PASS: TestGreet (0.00s)
// PASS
// go test -cover でカバレッジを確認する
// PASS coverage: 100.0% of statements
go run sample_go_build_run.go 7 Hello, Go!
概要
Goのテストは関数名が『Test』で始まり、引数に『*testing.T』を取る関数として定義します。テストファイルのファイル名は『_test.go』で終わらせる必要があります。
『go fmt』はプロジェクト全体に一貫したコードスタイルを適用します。GoではコードスタイルについてチームやAIと議論することなく、この標準フォーマットに統一するのが文化です。
『go vet』はコンパイルは通るが実行時にバグになりやすいコード(printf書式ミスなど)を検出します。CIパイプラインに組み込むことを推奨します。
モジュール管理は『Go Modules』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。