コンテンツにスキップ

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コマンドの包括的なリファレンスとして活用してください。日常的な開発作業から高度な使用法まで、幅広いシナリオに対応できるように構成されています。

下位階層のページ

[編集]