Go ツールチェーン
Go ツールチェーンの使用方法について説明します。
基本ツール
go コマンド
go コマンドの標準ドキュメント から始めてください。
主要な go サブコマンド:
go build
- パッケージをコンパイルgo run
- Go プログラムをコンパイルして実行go test
- テストを実行go get
- 依存関係をダウンロードしてインストールgo mod
- モジュール管理go fmt
- Go ソースをフォーマットgo vet
- Go ソースを静的解析
ベンダリング
ベンダリングについて学ぶ - 依存関係管理について。
Go Modules を使用した依存関係管理:
# 新しいモジュールを初期化
go mod init example.com/myproject
# 依存関係を追加
go get github.com/some/package
# 依存関係を整理
go mod tidy
# ベンダーディレクトリを作成
go mod vendor
クロスコンパイル
Cross Compilation - 異なるプラットフォーム向けのビルド。
基本的なクロスコンパイル
# Windows 向けにビルド(Linux/macOS から)
GOOS=windows GOARCH=amd64 go build
# Linux 向けにビルド(Windows/macOS から)
GOOS=linux GOARCH=amd64 go build
# macOS 向けにビルド(Linux/Windows から)
GOOS=darwin GOARCH=amd64 go build
# ARM64 向けにビルド
GOOS=linux GOARCH=arm64 go build
サポートされているプラットフォーム
# サポートされている GOOS と GOARCH の組み合わせを確認
go tool dist list
共有ライブラリと Go (buildmode)
Shared libraries and Go - Go と他言語の連携。
buildmode オプション
buildmode=c-shared
- C 共有ライブラリを作成buildmode=c-archive
- C アーカイブを作成buildmode=shared
- Go 共有ライブラリを作成buildmode=plugin
- Go プラグインを作成
例:C 共有ライブラリの作成
// main.go
package main
import "C"
//export Hello
func Hello() {
println("Hello from Go!")
}
func main() {} // 必要だが使用されない
# 共有ライブラリを作成
go build -buildmode=c-shared -o libhello.so main.go
関連リソース
- Go Shared Libraries - Go と Python からの共有ライブラリの作成と使用例
- Sharing Go Packages with C - Svetlin Ralchev による
- Calling Go libraries from Python - Filippo Valsorda による
- Calling Go libraries from Ruby - Peter Hellberg による
- Calling Go libraries from Swift - Jaana Burcu Dogan による
詳細な Wiki ページ
以下の Wiki ページで追加の詳細を参照してください:
基本ツール
- GoGetTools -
go get
で入手できるツール - GoGetProxyConfig - プロキシ設定
- cgo - C との連携
コンパイラと最適化
- CompilerOptimizations - コンパイラ最適化
- GccgoCrossCompilation - gccgo でのクロスコンパイル
- GcToolchainTricks - Go コンパイラのトリック
コード生成
- GoGenerateTools -
go generate
で使用するツール
必須ツール集
Go Tooling Essentials - Jaana Burcu Dogan による Go ツール解説
実践的なワークフロー
開発ワークフロー
プロジェクト初期化
mkdir myproject && cd myproject go mod init github.com/username/myproject
依存関係管理
go get github.com/some/package go mod tidy
開発とテスト
go run main.go go test ./... go vet ./...
ビルドとデプロイ
go build -o myapp # または クロスコンパイル GOOS=linux go build -o myapp-linux
継続的インテグレーション
# .github/workflows/go.yml の例
name: Go
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-go@v3
with:
go-version: 1.21
- run: go mod download
- run: go test ./...
- run: go vet ./...
パフォーマンス最適化
# プロファイリング
go test -cpuprofile=cpu.prof -bench=.
go tool pprof cpu.prof
# ベンチマーク
go test -bench=. -benchmem
# レース検出
go test -race ./...
トラブルシューティング
一般的な問題
- GOPATH の問題: Go 1.11+ では Go Modules を使用
- プロキシ問題:
GOPROXY
環境変数を確認 - プライベートリポジトリ:
GOPRIVATE
を設定
デバッグツール
# ビルド情報を詳細表示
go build -v
# 依存関係グラフを表示
go mod graph
# なぜこの依存関係が必要かを表示
go mod why package-name
Go ツールチェーンは、効率的な開発ワークフローを可能にする強力で統合されたツールセットです。これらのツールを習得することで、Go での開発生産性が大幅に向上します。