はじめに
Go Modulesは、Go言語でプロジェクトを管理するための依存関係管理ツールです。
従来の$GOPATHに依存せず、プロジェクトごとに依存関係を管理することができ、モダンなGo開発には欠かせない機能となっています。
Go Modulesとは?
Go Modulesは、以下の特徴を持つ依存関係管理ツールです。
- プロジェクトごとに依存関係を管理できる。
- $GOPATHに依存せずに、任意のディレクトリで開発が可能。
- バージョン管理が簡単に行える。
- 他の開発者と同じ環境を再現しやすい。
Go Modulesのメリット
- プロジェクトごとに依存関係を分離できるため、環境の競合を防げる。
- 任意のディレクトリで Go プロジェクトを作成 / 管理できる。
- バージョン管理が容易になり、同じバージョンの依存関係を再現できる。
Go Modules の基本コマンド
1. プロジェクトの初期化
新しいGo プロジェクトを作成する場合、go mod initを使って Go Modulesを初期化します。
mkdir myproject
cd myproject
go mod init github.com/username/myproject
- github.com/username/myprojectは、モジュール名であり、一般的に GitHubのリポジトリパスを指定します。
- 実行後、go.modファイルが生成されます。
2. 依存関係の追加
Go Modulesでは、外部パッケージをインポートすると自動で依存関係が追加されます。
例として、github.com/gorilla/mux
を使ってみます。
package main
import (
"fmt"
"net/http"
"github.com/gorilla/mux"
)
func main() {
r := mux.NewRouter()
r.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, Go Modules!")
})
http.ListenAndServe(":8080", r)
}
依存関係を追加するには、以下のコマンドを実行します。
go mod tidy
- go mod tidyは、go.modとgo.sumを自動的に更新します。
- go.sumファイルには、依存関係のチェックサムが記録され、依存関係の一貫性が保たれます。
3. 依存関係の更新
依存関係を最新バージョンに更新したい場合は、以下のコマンドを実行します。
go get -u github.com/gorilla/mux
- -uフラグを付けることで、マイナーバージョンの更新を行います。
- 最新のパッチバージョンのみを取得する場合は、-u=patchを指定します。
go get -u=patch github.com/gorilla/mux
4. 依存関係の削除
不要になった依存関係は、自動的には削除されません。
以下のコマンドを実行することで、使われていないパッケージを削除できます。
go mod tidy
- go mod tidyは、現在のプロジェクトで使用されていない依存関係を削除し、go.modとgo.sumを整理します。
Go Modules のバージョン管理
1. 特定のバージョンを指定する
依存関係のバージョンを指定してインストールすることも可能です。
go get github.com/gorilla/mux@v1.8.0
- @v1.8.0のように、バージョンタグを指定します。
- 特定のコミットを指定することもできます。
go get github.com/gorilla/mux@<commit-hash>
2. バージョンの確認
依存関係のバージョンを確認するには、以下のコマンドを使用します。
go list -m all
- go list -m allは、go.modに記載されているすべての依存関係とそのバージョンを表示します。
プロジェクトの実行とビルド
1. 実行
Go Modulesを使ったプロジェクトは、以下のコマンドで実行できます。
go run main.go
2. ビルド
バイナリを生成するには、go buildを使用します。
go build -o myapp main.go
./myapp
-
-o
オプションで、生成するバイナリの名前を指定します。
まとめ
項目 | 説明 |
---|---|
Go Modules | プロジェクトごとの依存関係管理ツール。$GOPATH に依存しない。 |
go mod init | 新しいプロジェクトを初期化する。 |
go mod tidy | 依存関係の追加、削除、および整理を行う。 |
go get | 依存関係のインストール・更新・バージョン指定が可能。 |
依存関係の管理が楽になり、モダンな Go 開発が可能になります。