goのモジュール管理について調べてみた
Go ModulesはGo言語でのパッケージ管理するものです。
rubyのbundlerや、nodeのnpmみたいなパッケージ管理ツールになります。
go.mod
とか go.sum
ってやつですね。
今までなんとなく、go install
、go get
、go mod tidy
を叩いてたんですが、そろそろ理解しておきたいなと思って調べてみました。
初期化
go mod init
GOPATH環境変数で指定した場所以外にしたい場合はこちら
go mod init example.com/m/v2
上記を叩くと、go.mod
というファイルが生成されます。
module example.com/m/v2
go 1.18
ここにモジュールを追加していくのですが、追加する仕組みがなかなか面白い仕組みでした。
モジュールの追加
- コードで必要な
import文
を書く -
go mod tidy
を叩く - 初回だと、
go.sum
ファイルが生成される
go mod tidy
はよく叩いてるが、何をしてくれるものかいまいちよくわかっていなかった。
コードのimport
文を見て、足りないものは追加、既に使っていないものは削除してくれるとのこと。
ちなみに、tidy
は几帳面とか、きちんとした、こぎれいな、みたいな意味らしいです。
つまり、よしなにやってくれるもの。
モジュールの追加方法には他に、go get [モジュール名]
もあります。
使うのは好みで良さそうだけど、go mod tidy
の方が削除もやってくれる。
モジュールの削除
前述したgo mod tidy
を使う。
最初、go.mod
からモジュールを削除してgo mod tidy
叩いてみたけど消えず、しばらく悩みました。
正しいやり方は、
- コードから不要なモジュールの
import文
を削除する -
go mod tidy
を叩く
でした。
go get
と go install
検索すると、こんな記事があって、結局何を使えばいいの?となってしまう。
タイトルだけ見ると、これからgo install
使うのかな?と思うのですが、これはあくまでバイナリインストール(ターミナルで叩くコマンドとか)の話です。元々このバイナリインストールもgo get
で出来ていたみたいです。
- バイナリインストール(ターミナルで叩くコマンドとか)には
go install
-
go.mod
に追加するときはgo get
使っても良い。だけどgo mod tidy
でもできるからgo get
はほとんど使わなくなっていく
ってことらしいです。
まとめ
今回は雰囲気で叩いていたgo module周りのコマンドについてまとめてみました。
結論としては、とりあえずgo mod tidy
叩いていればいい感じにしてくれそうです。
アップデートや依存解消については、また意識しなければいけないことがあると思うので、必要になったら調べてみようと思います。
Discussion