kazu22002の技術覚書

PHPer, Golang, AWS エンジニアの日々

go modulesの使い方

f:id:kazu22002:20200918213002p:plain

golangで開発をしていると、gopath配下で開発を行なっていました。

理由としては、読み込まれるソースがgopath配下にあるソースが対象になるため、自作したプロジェクトのコードを相対パスで指定する必要があったからです。

Go 1.11で導入されたGo modulesの登場によりいろいろと解決されました。Go modulesはpackage管理ツールだと思ってください。

  • GOPATH配下で開発をする必要がない
  • プロジェクトごとに使用するパッケージのバージョン指定が可能に

使っていない人はぜひ使ってみてください。

使い方

blog.golang.org

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の場合は設定が必要になります。

参考

zenn.dev

zenn.dev