👋

goのモジュール管理について調べてみた

2022/08/01に公開

Go ModulesはGo言語でのパッケージ管理するものです。
rubyのbundlerや、nodeのnpmみたいなパッケージ管理ツールになります。
go.mod とか go.sum ってやつですね。

今までなんとなく、go installgo getgo mod tidyを叩いてたんですが、そろそろ理解しておきたいなと思って調べてみました。

初期化

go mod init

GOPATH環境変数で指定した場所以外にしたい場合はこちら
go mod init example.com/m/v2

上記を叩くと、go.modというファイルが生成されます。

module example.com/m/v2

go 1.18

ここにモジュールを追加していくのですが、追加する仕組みがなかなか面白い仕組みでした。

モジュールの追加

  1. コードで必要なimport文を書く
  2. go mod tidyを叩く
  3. 初回だと、go.sumファイルが生成される

go mod tidyはよく叩いてるが、何をしてくれるものかいまいちよくわかっていなかった。
コードのimport文を見て、足りないものは追加、既に使っていないものは削除してくれるとのこと。

ちなみに、tidyは几帳面とか、きちんとした、こぎれいな、みたいな意味らしいです。
つまり、よしなにやってくれるもの。

モジュールの追加方法には他に、go get [モジュール名]もあります。
使うのは好みで良さそうだけど、go mod tidyの方が削除もやってくれる。

モジュールの削除

前述したgo mod tidyを使う。
最初、go.modからモジュールを削除してgo mod tidy叩いてみたけど消えず、しばらく悩みました。

正しいやり方は、

  1. コードから不要なモジュールのimport文を削除する
  2. go mod tidyを叩く

でした。

go getgo install

検索すると、こんな記事があって、結局何を使えばいいの?となってしまう。
https://qiita.com/eihigh/items/9fe52804610a8c4b7e41

タイトルだけ見ると、これからgo install使うのかな?と思うのですが、これはあくまでバイナリインストール(ターミナルで叩くコマンドとか)の話です。元々このバイナリインストールもgo getで出来ていたみたいです。

  • バイナリインストール(ターミナルで叩くコマンドとか)にはgo install
  • go.modに追加するときはgo get使っても良い。だけどgo mod tidyでもできるからgo getはほとんど使わなくなっていく

ってことらしいです。

まとめ

今回は雰囲気で叩いていたgo module周りのコマンドについてまとめてみました。
結論としては、とりあえずgo mod tidy叩いていればいい感じにしてくれそうです。
アップデートや依存解消については、また意識しなければいけないことがあると思うので、必要になったら調べてみようと思います。

Discussion