概要
過去に go dep を使ったパッケージ管理方法を紹介しました
現在は go mod を使う方法が主流なので go mod を使ったパッケージ管理の方法を紹介します
環境
- macOS 11.5.2
- golang 1.17
サンプルコード
以下のコードを実行するために依存関係を go mod を使って解決します
Sirupsen/logrus という外部のパッケージを使っています
- cd $GOPATH/src/github.com/hawksnowlog/test
- vim main.go
package main
import (
log "github.com/Sirupsen/logrus"
)
func main() {
log.WithFields(log.Fields{
"key": "value",
}).Info("logrus test")
}
初期化
まずは初期化します
これで go.mod ファイルが作成されます
- cd $GOPATH/src/github.com/hawksnowlog/test
- go mod init
依存関係の解決
スクリプト内で使用しているパッケージを自動的に読み取ってインストールしてくれます
また go.mod が更新されて依存関係を自動で追記してくれる他 go.sum も生成されます
- cd $GOPATH/src/github.com/hawksnowlog/test
- go mod tidy
- cat go.mod
module github.com/hawksnowlog/test
go 1.17
require github.com/sirupsen/logrus v1.8.1
require golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 // indirect
ちなみに上記モジュールがインストールされるパスは
$GOPATH/pkg/mod/github.com/sirupsen/logrus@v1.8.1
でした
ビルド
あとはビルドするだけです
バイナリが生成されるか確認しましょう
- cd $GOPATH/src/github.com/hawksnowlog/test
- go build
実行
カレントにバイナリが生成されているので実行してみましょう
ちゃんと外部のモジュールが使われてエラーにならないことが確認できます
- cd $GOPATH/src/github.com/hawksnowlog/test
- ./test
INFO[0000] logrus test key=value
外部パッケージを追加したい場合は
普通に go get を使います
- cd $GOPATH/src/github.com/hawksnowlog/test
- go get github.com/gomodule/redigo/redis
これで自動的に go.mod にも依存関係が追記されます
- cat go.mod
module github.com/hawksnowlog/test
go 1.17
require github.com/sirupsen/logrus v1.8.1
require (
github.com/gomodule/redigo v1.8.5 // indirect
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 // indirect
)
あとは普通にスクリプト内で import すれば OK です
もしスクリプトのどこでも使われていない場合に再度 go mod tidy すると自動で依存関係を削除してくれます
最後に
go mod help で詳しい説明も確認できます
比較的新しい golang であれば標準で搭載されているのでこちらを使いましょう
0 件のコメント:
コメントを投稿