Go ツールチェーン

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

関連リソース

詳細な Wiki ページ

以下の Wiki ページで追加の詳細を参照してください:

基本ツール

コンパイラと最適化

コード生成

必須ツール集

Go Tooling Essentials - Jaana Burcu Dogan による Go ツール解説

実践的なワークフロー

開発ワークフロー

  1. プロジェクト初期化

    mkdir myproject && cd myproject
    go mod init github.com/username/myproject
  2. 依存関係管理

    go get github.com/some/package
    go mod tidy
  3. 開発とテスト

    go run main.go
    go test ./...
    go vet ./...
  4. ビルドとデプロイ

    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 ./...

トラブルシューティング

一般的な問題

  1. GOPATH の問題: Go 1.11+ では Go Modules を使用
  2. プロキシ問題: GOPROXY 環境変数を確認
  3. プライベートリポジトリ: GOPRIVATE を設定

デバッグツール

# ビルド情報を詳細表示
go build -v

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

# なぜこの依存関係が必要かを表示
go mod why package-name

Go ツールチェーンは、効率的な開発ワークフローを可能にする強力で統合されたツールセットです。これらのツールを習得することで、Go での開発生産性が大幅に向上します。