go modによるGo Modules
モジュールの初期化、go.mod、go.sum
「go modによるGo Modules」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。
Goモジュールとは
モジュールは、ルートにgo.modファイルを持つGoパッケージの集合です。モジュールは、Goにおけるコードの配布とバージョン管理の単位です:
// go.mod — created with: go mod init github.com/myuser/myapp
module github.com/myuser/myapp
go 1.21
require (
github.com/gin-gonic/gin v1.9.1
golang.org/x/sync v0.5.0
)go mod init
go mod initで新しいモジュールを初期化します:
# In project directory:
go mod init github.com/myuser/myapp
# This creates go.mod:
# module github.com/myuser/myapp
# go 1.21
# The module path is the canonical import path prefix
# for all packages in this modulego.sum — 整合性の検証
go.sumには、すべての依存関係の暗号学的チェックサムが記録されます。手動で編集しないでください。goコマンドが管理します:
# go.sum example entries:
github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg=
github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU=
# Commit go.sum to version control — it ensures reproducible buildsgo get — 依存関係の追加
依存関係の追加や更新にはgo getを使用します。go.modとgo.sumの両方が更新されます:
# Add latest version
go get github.com/pkg/errors
# Add specific version
go get github.com/pkg/errors@v0.9.1
# Upgrade to latest patch release
go get -u=patch github.com/pkg/errors
# Remove unused dependency from go.mod
go mod tidygo mod tidy
go mod tidyは、go.modとgo.sumから不足している要件を追加し、使用されていない要件を削除します。インポートを編集した後に実行します:
# After adding/removing imports:
go mod tidy
# What it does:
# 1. Adds any missing module requirements
# 2. Removes requirements for packages no longer imported
# 3. Updates go.sum with needed checksums
# 4. Best practice: run before committingSemverによるモジュールのバージョン管理
Goモジュールはセマンティックバージョニングを使用します。メジャーバージョンが2以上の場合は、パスにサフィックスが必要です:
// v1: github.com/pkg/errors
import "github.com/pkg/errors"
// v2+: module path includes major version
import "github.com/foo/bar/v2"
import "github.com/foo/bar/v3"
// go.mod:
// require github.com/foo/bar/v2 v2.3.1go mod vendor
Vendorモードでは、オフラインビルドのためにすべての依存関係をローカルのvendor/ディレクトリへコピーします:
# Copy deps to vendor/
go mod vendor
# Build using vendor/
go build -mod=vendor ./...
# Useful for:
# - Air-gapped environments
# - Reproducible CI builds without network
# - Code review of dependenciesreplaceディレクティブ
go.modのreplaceディレクティブは、モジュールをローカルパスまたは別のバージョンに置き換えます。ローカル開発に便利です:
module github.com/myapp
go 1.21
require github.com/mylib v1.0.0
// Use local fork during development:
replace github.com/mylib => ../mylib
// Replace with a specific version:
// replace github.com/mylib v1.0.0 => github.com/myfork v1.0.0go env GOPATH と GOMODCACHE
Goモジュールで重要な環境変数:
# Module cache location (default: ~/go/pkg/mod)
go env GOMODCACHE
# Proxy for downloading modules (default: proxy.golang.org)
go env GOPROXY
# Sum database for checksum verification
go env GONOSUMCHECK
# Disable module proxy (use direct)
export GOPROXY=directgo list と go mod graph
次のコマンドでモジュールの依存関係を調べます:
# List all modules in the build
go list -m all
# Show module dependency graph
go mod graph
# Find which module provides a package
go list -m -json all | grep -A5 gin
# Check for available updates
go list -m -u allクイックチェック
go mod tidyは何を行いますか?
まとめ:Goモジュール
モジュールの主な概念:
go mod initはgo.modファイルを含むモジュールを作成しますgo.modにはモジュール名、Goのバージョン、依存関係が記載されますgo.sumにはチェックサムが保存されます。コミットしてくださいgo getは依存関係を追加・更新し、go mod tidyは整理します- ローカル開発用のフォークには
replaceを使用します - メジャーバージョンv2以降では、パスにサフィックスが必要です
よくある質問
「go modによるGo Modules」レッスンは無料ですか?
はい。「go modによるGo Modules」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。
「go modによるGo Modules」で何を学びますか?
モジュールの初期化、go.mod、go.sum ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Go Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「go modによるGo Modules」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このGo Academyレッスンでコードを書いて実行できますか?
はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- パッケージ:Goコードの整理
- go modによるGo Modules
- 外部依存関係の追加
- 内部パッケージとワークスペース