go modulesの使い方
golangで開発をしていると、gopath配下で開発を行なっていました。
理由としては、読み込まれるソースがgopath配下にあるソースが対象になるため、自作したプロジェクトのコードを相対パスで指定する必要があったからです。
Go 1.11で導入されたGo modulesの登場によりいろいろと解決されました。Go modulesはpackage管理ツールだと思ってください。
- GOPATH配下で開発をする必要がない
- プロジェクトごとに使用するパッケージのバージョン指定が可能に
使っていない人はぜひ使ってみてください。
使い方
go mod init 対象のパッケージ
go.modファイルが作成されます。使用しているパッケージは「go mod tidy」で取得などできます。
go mod tidy
# go help mod The commands are: download download modules to local cache edit edit go.mod from tools or scripts graph print module requirement graph init initialize new module in current directory tidy add missing and remove unused modules vendor make vendored copy of dependencies verify verify dependencies have expected content why explain why packages or modules are needed
個人的には「go build」や「go test」でもパッケージの取得をしてくれるので、こちらを利用しています。
取得したライブラリは「~/go/pkg/mod/」に保存されています。
雑記
golangのパッケージ管理が標準でないときはdepを使用していましたが、標準がでたので使うツールをgo modulesに変えましたね。
go getで取得される内容はgopath配下にグローバルで取得されるため、複数プロジェクトを行う際に悩まされました。複数人で開発をしている時も、取得されるバージョンの違いでエラーになったりと詰まることが結構ありました。
現代ではパッケージ管理は重要なツールになっているので、身につけておくといいと思います。
エディタはgolandを使用しているため、設定を保管してくれている内容もありそうです。
環境変数にGO111MODULE=on を指定する内容をよく見かけるが、go1.12を使用しているため設定していない。
export GO111MODULE=on
go1.11の場合は設定が必要になります。