Contents
学習環境の構築とツール設定
ポイント
- 各 OS で「公式バイナリ」または信頼できるパッケージマネージャーからインストールし、PATHを正しく通すだけで Go 開発がすぐに始められます。
- 設定例は Apple Silicon、Intel macOS、Windows 10/11、Ubuntu に分けて記載しています。
1. Go のインストール手順
| OS | 推奨インストール方法 | PATH 設定のポイント |
|---|---|---|
| macOS(Apple Silicon) | Homebrew: brew install go |
bash<br># Apple Silicon 用のパス例<br>export PATH=$PATH:$(brew --prefix)/opt/go/libexec/bin<br>$(brew --prefix) が自動で /opt/homebrew を返すため、Intel/macOS でも同様に機能します。 |
| macOS(Intel) | Homebrew: brew install go |
bash<br># Intel 用のパス例<br>export PATH=$PATH:/usr/local/opt/go/libexec/bin<br> |
| Windows | 公式 MSI (https://golang.org/dl/) を実行 | MSI はインストール先(既定は C:\Go\bin)を自動で環境変数に追加しません。インストール後、システムの「環境変数」設定画面で Path に C:\Go\bin を手動で登録してください。 |
| Ubuntu (Linux) | APT: sudo apt-get update && sudo apt-get install -y golang または公式 tar.gz を /usr/local/go に展開 |
bash<br># /usr/local/go/bin を PATH に追加<br>export PATH=$PATH:/usr/local/go/bin<br> |
インストール確認
|
1 2 |
go version # → go version go1.xx linux/amd64 などが表示されれば成功 |
2. VSCode の拡張機能と推奨設定
VSCode 用公式拡張 Go (golang.go) をインストールすると gopls が自動でセットアップされ、コード補完・静的解析・デバッグが利用可能です。
推奨ツール
- staticcheck –
golintの後継として公式に推奨。高速かつ包括的な Linter。 - revive – カスタマイズ性の高い代替 Linter。
settings.json 例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
{ // フォーマッタは標準の gofmt(または gofumpt)を使用 "go.formatTool": "gofmt", // 推奨 Lint ツール "go.lintTool": "staticcheck", // Language Server を有効化 "go.useLanguageServer": true, "[go]": { "editor.formatOnSave": true, "editor.codeActionsOnSave": { "source.organizeImports": true } }, // staticcheck の実行パス(Homebrew 等でインストールした場合の例) "go.toolsManagement.checkForUpdates": "local", "go.lintFlags": ["-tags=integration"] } |
補足:
staticcheckはgo install honnef.co/go/tools/cmd/staticcheck@latestでインストールできます。
3. go.mod の基本とプロジェクト初期化
Go 1.16 以降はモジュールがデフォルトで有効です。以下の手順で最小構成のプロジェクトを作ります。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
mkdir hello && cd hello go mod init github.com/yourname/hello # GitHub リポジトリと同名にすると便利 cat > main.go <<'EOF' package main import "fmt" func main() { fmt.Println("Hello, Go!") } EOF go run . |
生成される go.mod は次のようになります(バージョンはインストール時点の最新安定版)。
|
1 2 3 4 |
module github.com/yourname/hello go 1.21 # 現在の最新版を記載。将来のリリースに合わせて更新してください。 |
外部パッケージ例:
|
1 2 |
go get github.com/gin-gonic/gin@v1.9.0 |
go.mod に自動で require 行が追記されます。
言語基礎とパッケージ管理
データ型・制御フローのサンプル
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package main import ( "fmt" ) func main() { var ( i int = 42 f float64 = 3.14 s string = "Go" ok bool = true ) fmt.Println(i, f, s, ok) if i > 0 { fmt.Println("正の数") } for j := 0; j < 5; j++ { fmt.Println(j) } } |
関数・メソッド・インターフェース
|
1 2 3 4 5 6 7 8 |
type Shape interface { Area() float64 } type Circle struct{ R float64 } func (c Circle) Area() float64 { return math.Pi * c.R * c.R } |
Circle が Shape を満たすかはコンパイル時に自動判定されます。
go.mod を使ったモジュール化
|
1 2 |
go get github.com/go-playground/validator/v10@v10.12.0 |
go.mod に次が追記されます:
|
1 2 |
require github.com/go-playground/validator/v10 v10.12.0 // indirect |
エラーハンドリング・並行処理・テストのベストプラクティス
1️⃣ error のラップとスタックトレース(Go 1.13+)
|
1 2 3 4 5 6 7 |
if err := doSomething(); err != nil { return fmt.Errorf("doSomething failed: %w", err) } // 呼び出し側 if errors.Is(err, sql.ErrNoRows) { /* ... */ } |
2️⃣ goroutine と channel の基本パターン
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
var wg sync.WaitGroup jobs := make(chan int, 5) for i := 0; i < 3; i++ { wg.Add(1) go func(id int) { defer wg.Done() for j := range jobs { fmt.Printf("worker %d processing %d\n", id, j) } }(i) } for n := 0; n < 10; n++ { jobs <- n } close(jobs) wg.Wait() |
3️⃣ sync パッケージで安全な共有
|
1 2 3 4 5 6 |
type Counter struct { mu sync.Mutex n int } func (c *Counter) Inc() { c.mu.Lock(); c.n++; c.mu.Unlock() } |
go run -race ./... で競合検出が可能です。
4️⃣ testing パッケージによるテーブル駆動テストとベンチマーク
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
func TestAdd(t *testing.T) { cases := []struct{ a, b, want int }{ {1, 2, 3}, {5, -2, 3}, } for _, c := range cases { if got := Add(c.a, c.b); got != c.want { t.Errorf("Add(%d,%d) = %d; want %d", c.a, c.b, got, c.want) } } } func BenchmarkAdd(b *testing.B) { for i := 0; i < b.N; i++ { Add(123, 456) } } |
CI(GitHub Actions 等)で go test ./... を走らせれば、プルリクエスト時に自動的に結果が報告されます。
主要フレームワーク・実務活用例とデプロイ手順
標準ライブラリ net/http でシンプル API
|
1 2 3 4 5 6 7 8 9 |
func helloHandler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") fmt.Fprint(w, `{"message":"Hello, Go API"}`) } func main() { http.HandleFunc("/hello", helloHandler) log.Fatal(http.ListenAndServe(":8080", nil)) } |
Gin を使った本格的 REST API 雛形
|
1 2 3 4 5 6 7 |
r := gin.Default() r.GET("/users/:id", func(c *gin.Context) { id := c.Param("id") c.JSON(200, gin.H{"user_id": id}) }) r.Run(":8080") // listen and serve on 0.0.0.0:8080 |
Docker コンテナ化(マルチステージビルド)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# ------------------------------------------------- # ビルダーイメージ – 利用可能なタグは公式リポジトリで確認 # 例: golang:1.21-alpine, golang:latest など # ------------------------------------------------- ARG GO_VERSION=1.21-alpine FROM golang:${GO_VERSION} AS builder WORKDIR /src COPY . . RUN go mod tidy && \ CGO_ENABLED=0 GOOS=linux go build -o server . # ------------------------------------------------- # 実行用イメージ – 軽量 Alpine ベース # ------------------------------------------------- FROM alpine:3.18 WORKDIR /app COPY --from=builder /src/server . EXPOSE 8080 ENTRYPOINT ["./server"] |
ポイント:
ARG GO_VERSIONを使うことで、将来のタグ変更にも柔軟に対応できます。ビルド前にdocker pull golang:<tag>が成功するか必ず確認してください。
GitHub Actions CI/CD(簡易サンプル)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
name: CI on: push: branches: [ main ] jobs: test-build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Go uses: actions/setup-go@v4 with: go-version: 'stable' # 最新安定版を自動取得 - name: Run tests run: go test ./... - name: Build Docker image run: | docker build -t ghcr.io/${{ github.repository }}:${{ github.sha }} . |
PaaS へのデプロイ例(Railway / Render)
- GitHub にリポジトリをプッシュ
- Railway または Render のコンソールで「New Project」→「GitHub リポジトリ」を選択
- Dockerfile が検出されれば自動でビルド設定が作成されます
- 必要に応じて環境変数
PORT(デフォルト 8080)や DB 接続情報を UI に入力 - デプロイ完了 → 提供された URL が API エンドポイントになります
学習ロードマップ・リソース一覧と次のアクション
ステップ別タイムライン
| 期間 | 主な学習項目 | 成果物例 |
|---|---|---|
| 1 ヶ月 | 環境構築、基本文法、go.mod、シンプルテスト |
「Hello World」+ テーブル駆動テスト |
| 3 ヶ月 | エラーハンドリング・並行処理、Gin で CRUD API、Docker 化 | Todo アプリ(CRUD) |
| 6 ヶ月 | CI/CD、マイクロサービス設計、ベンチマーク、クラウドデプロイ | 本格的なマイクロサービス+GitHub Actions デプロイ |
進捗は GitHub Projects の Kanban ボードや Notion テンプレートで可視化すると、抜け漏れが防げます。
推奨教材・コミュニティ(最新版情報に合わせて随時更新)
| 種類 | タイトル/リンク |
|---|---|
| ロードマップ(公式) | roadmap.sh – Go Track (https://roadmap.sh/go) |
| 記事・解説 | Qiita 「Go 入門完全ガイド」 https://qiita.com/tags/Go |
| 実務向け書籍 | 「Programming Go (第2版)」 – 公式サイトで最新出版情報を確認 |
| オンラインコース | Udemy「Go 言語マスター講座」 |
| コミュニティ | Slack gophers.jp、Discord go‑community |
ハンズオンプロジェクトの公開とフィードバック取得
- GitHub にリポジトリを作成し
README.mdに目的・使用技術を書く。 - 完成したら Go 系 Slack/Discord の #project-review チャンネルへリンク投稿。
- 受けたコメントは Issue 化し、改善サイクルに組み込む。
効果:外部レビューを通じてコード品質と実務感覚が同時に向上します。
まとめ
- 環境構築:OS に合わせた正しい
PATH設定でインストール完了。 - IDE 設定:
staticcheck等の最新 Linter を使用し、golintは避ける。 - モジュール管理:
go.modがあれば依存は自動ロック・再現性が担保されます。 - 実務スキル:エラーハンドリング、並行処理、テストを習得したらフレームワークと Docker に進む。
- CI/CD とデプロイ:マルチステージ Docker + GitHub Actions が最小構成のベストプラクティスです。
このロードマップに沿って学習し、定期的にコミュニティでアウトプットすれば、半年以内に実務レベルの Go 開発者として活躍できるでしょう。