コンテンツにスキップ

Go/goコマンド

出典: フリー教科書『ウィキブックス(Wikibooks)』
< Go

概要

[編集]

goコマンドはGo言語の統合開発ツールです。コンパイル、実行、テスト、パッケージ管理、コード整形など、Go開発に必要な機能を一元的に提供します。

基本的な使用法

[編集]
go <command> [arguments]
ヘルプの表示:
go help
go help <command>

基本的なコマンド

[編集]

go version

[編集]

Go のバージョン情報を表示します。

go version
# 出力例: go version go1.21.0 linux/amd64

go env

[編集]

Go の環境変数を表示・設定します。

# すべての環境変数を表示
go env

# 特定の環境変数を表示
go env GOPATH GOROOT

# 環境変数を設定
go env -w GOPROXY=direct

ビルド・実行系コマンド

[編集]

go run

[編集]

Go プログラムをコンパイルして実行します。

# 単一ファイルの実行
go run main.go

# 複数ファイルの実行
go run main.go utils.go

# パッケージ全体の実行
go run .

# 引数を渡す場合
go run main.go -- arg1 arg2
オプション
  • -race: レースコンディション検出を有効化
  • -ldflags: リンカーフラグを指定

go build

[編集]

Go プログラムをコンパイルして実行可能ファイルを生成します。

# 現在のディレクトリをビルド
go build

# 特定のファイルをビルド
go build main.go

# 出力ファイル名を指定
go build -o myapp main.go

# クロスコンパイル
GOOS=windows GOARCH=amd64 go build -o myapp.exe
主要なオプション
  • -o <filename>: 出力ファイル名を指定
  • -v: ビルド過程を詳細表示
  • -x: 実行されるコマンドを表示
  • -race: レースコンディション検出を有効化
  • -ldflags: リンカーフラグを指定
  • -tags: ビルドタグを指定
  • -trimpath: ファイルパス情報を削除

go install

[編集]

パッケージをコンパイルして $GOPATH/bin または $GOBIN にインストールします。

# 現在のパッケージをインストール
go install

# 特定のパッケージをインストール
go install github.com/user/package@latest

# 特定のバージョンをインストール
go install github.com/user/package@v1.2.3

テスト系コマンド

[編集]

go test

[編集]

テストを実行します。

# 現在のパッケージのテストを実行
go test

# すべてのサブパッケージのテストを実行
go test ./...

# 特定のパッケージのテストを実行
go test ./internal/utils

# 詳細な出力
go test -v

# 特定のテスト関数のみ実行
go test -run TestFunction

# ベンチマークテストを実行
go test -bench=.

# カバレッジを測定
go test -cover
go test -coverprofile=coverage.out
主要なオプション
  • -v: 詳細な出力
  • -run <pattern>: 特定のテスト関数を実行
  • -bench <pattern>: ベンチマークテストを実行
  • -cover: カバレッジを表示
  • -coverprofile <file>: カバレッジをファイルに出力
  • -race: レースコンディション検出
  • -timeout <duration>: タイムアウトを設定
  • -parallel <n>: 並列実行数を設定

go test の詳細な使用例

[編集]
# 特定のパッケージのテストを詳細表示で実行
go test -v ./internal/database

# レースコンディションチェック付きでテスト
go test -race ./...

# ベンチマークとカバレッジの同時実行
go test -bench=. -cover

# カバレッジレポートの生成
go test -coverprofile=coverage.out ./...
go tool cover -html=coverage.out -o coverage.html

パッケージ管理

[編集]

go mod

[編集]

Go Modules を使用した依存関係管理。

# 新しいmoduleを初期化
go mod init module-name

# 依存関係を追加
go get github.com/gin-gonic/gin

# 特定のバージョンを指定
go get github.com/gin-gonic/gin@v1.9.1

# 依存関係を更新
go get -u github.com/gin-gonic/gin

# すべての依存関係を更新
go get -u ./...

# 依存関係を削除
go mod tidy

# 依存関係のダウンロード
go mod download

# vendor ディレクトリを作成
go mod vendor

# 依存関係の確認
go mod why github.com/gin-gonic/gin

# 依存関係のグラフを表示
go mod graph

go get

[編集]

パッケージのダウンロードとインストール。

# 最新版をダウンロード
go get github.com/user/package

# 特定のバージョンをダウンロード
go get github.com/user/package@v1.2.3

# ブランチを指定
go get github.com/user/package@main

# 依存関係を更新
go get -u github.com/user/package

# 依存関係を削除
go get github.com/user/package@none

開発支援コマンド

[編集]

go fmt

[編集]

Go コードの書式を整えます。

# 現在のディレクトリのファイルを整形
go fmt

# 特定のファイルを整形
go fmt main.go

# すべてのサブディレクトリを整形
go fmt ./...

gofmt

[編集]

より詳細な書式設定オプションを提供。

# ファイルを整形して結果を表示
gofmt main.go

# ファイルを直接書き換え
gofmt -w main.go

# 簡単化を適用
gofmt -s main.go

# 差分を表示
gofmt -d main.go

go vet

[編集]

コードの静的解析を行い、潜在的な問題を検出します。

# 現在のパッケージを検査
go vet

# すべてのサブパッケージを検査
go vet ./...

# 特定の検査のみ実行
go vet -printf ./...

go fix

[編集]

古いAPIを新しいAPIに自動変換します。

go fix ./...

go generate

[編集]

コード生成を実行します。

# 現在のパッケージでgo:generateを実行
go generate

# すべてのパッケージで実行
go generate ./...

情報取得コマンド

[編集]

go list

[編集]

パッケージ情報を表示します。

# 現在のパッケージ情報を表示
go list

# すべてのパッケージを表示
go list ./...

# 詳細な情報を表示
go list -f '{{.ImportPath}} {{.Dir}}' ./...

# 依存関係を表示
go list -deps ./...

# JSON形式で出力
go list -json ./...

go doc

[編集]

ドキュメントを表示します。

# パッケージのドキュメントを表示
go doc fmt

# 特定の関数のドキュメントを表示
go doc fmt.Printf

# 現在のパッケージのドキュメントを表示
go doc

# すべてのエクスポートされた識別子を表示
go doc -all fmt

go clean

[編集]

ビルド時に生成されたファイルを削除します。

# ビルドファイルを削除
go clean

# キャッシュを削除
go clean -cache

# モジュールキャッシュを削除
go clean -modcache

# テストファイルを削除
go clean -testcache

環境変数

[編集]

主要な環境変数

[編集]

GOPATH: Go ワークスペースのパス(Go Modules使用時は通常不要)

export GOPATH=$HOME/go

GOROOT: Go インストールディレクトリ

export GOROOT=/usr/local/go

GOPROXY: モジュールプロキシの設定

export GOPROXY=https://proxy.golang.org,direct

GOSUMDB: チェックサムデータベースの設定

export GOSUMDB=sum.golang.org

GOPRIVATE: プライベートモジュールの設定

export GOPRIVATE=github.com/mycompany/*

CGO_ENABLED: CGOの有効/無効

export CGO_ENABLED=0  # 無効
export CGO_ENABLED=1  # 有効

ビルドタグ

[編集]

ビルドタグの基本的な使用法

[編集]
//go:build linux
// +build linux

package main

import "fmt"

func main() {
    fmt.Println("This runs only on Linux")
}

複数条件の指定

[編集]
//go:build (linux && amd64) || (darwin && arm64)

package main

ビルドタグの指定

[編集]
# 特定のタグでビルド
go build -tags "production"

# 複数のタグでビルド
go build -tags "production,debug"

実践的な使用例

[編集]

新しいプロジェクトの開始

[編集]
# プロジェクトディレクトリを作成
mkdir myproject
cd myproject

# Go moduleを初期化
go mod init github.com/username/myproject

# 依存関係を追加
go get github.com/gin-gonic/gin

# コードを書いてテスト
go test ./...

# ビルドして実行
go build -o myapp
./myapp

継続的な開発ワークフロー

[編集]
# コードの品質チェック
go fmt ./...
go vet ./...

# テストの実行
go test -race -cover ./...

# ビルドの確認
go build ./...

# 依存関係の整理
go mod tidy

リリース用ビルド

[編集]
# 本番用ビルド(最適化)
go build -ldflags "-s -w" -o myapp

# クロスコンパイル(複数プラットフォーム)
GOOS=linux GOARCH=amd64 go build -o myapp-linux-amd64
GOOS=windows GOARCH=amd64 go build -o myapp-windows-amd64.exe
GOOS=darwin GOARCH=amd64 go build -o myapp-darwin-amd64

デバッグとプロファイリング

[編集]
# レースコンディション検出
go run -race main.go

# CPUプロファイリング
go test -cpuprofile=cpu.prof -bench=.
go tool pprof cpu.prof

# メモリプロファイリング
go test -memprofile=mem.prof -bench=.
go tool pprof mem.prof

よく使用するコマンドの組み合わせ

[編集]
# 完全なテストとビルド
go fmt ./... && go vet ./... && go test ./... && go build

# 依存関係の更新とテスト
go get -u ./... && go mod tidy && go test ./...

# カバレッジレポートの生成
go test -coverprofile=coverage.out ./... && go tool cover -html=coverage.out

トラブルシューティング

[編集]

よくある問題と解決方法

[編集]
モジュールが見つからない場合
go mod download
go mod tidy
キャッシュの問題
go clean -modcache
go clean -cache
プロキシの問題
go env -w GOPROXY=direct
go env -w GOSUMDB=off

このハンドブックは、Go言語のgoコマンドの包括的なリファレンスとして活用してください。日常的な開発作業から高度な使用法まで、幅広いシナリオに対応できるように構成されています。

サブコマンド一覧
名称 説明
bug バグレポートを開始する
build パッケージと依存関係をコンパイルする
clean オブジェクトファイルやキャッシュファイルを削除する
doc パッケージやシンボルのドキュメントを表示する
env Goの環境情報を表示する
fix 静的解析ツールが推奨する修正を適用する
fmt パッケージのソースコードを整形(gofmt)する
generate ソースを処理してGoファイルを生成する
get 現在のモジュールに依存関係を追加し、インストールする
help ヘルプを表示する
install パッケージと依存関係をコンパイルし、インストールする
list パッケージまたはモジュールを一覧表示する
mod モジュールのメンテナンスを行う
work ワークスペースのメンテナンスを行う
run Goプログラムをコンパイルして実行する
telemetry テレメトリ(計測データ)のデータと設定を管理する
test パッケージのテストを実行する
tool 指定されたGoツールを実行する
version Goのバージョンを表示する
vet パッケージ内の誤りと思われる箇所を報告する

下位階層のページ

[編集]