😸

Goのパッケージ管理をコマンド打って確認してみた

2024/11/23に公開
2

これだけわかればOK

  • Goではライブラリやパッケージは「モジュール」と言うらしい
  • モジュールは大きく2つに分かれる
    1. 依存パッケージ(フレームワークのようなアプリ内で利用するモジュール)
    2. コマンドラインツール(CLIのコマンドで使えるようになるモジュール。「$GOPATH/bin」にあることが多い)
  • モジュールをインストールする場合は2種類
    1. Go get [URL]」(依存パッケージの場合。コマンドツールは後述)
      個別にモジュールをダウンロードする(同時にgo.modに追記もされるので、開発時に新しくモジュールを追加したい場合はこっち)
    2. Go mod download
      go.modというパッケージ管理ファイルからモジュールをまとめてダウンロードする(チームで開発している際の環境構築はこちらになりそう)

Goでのモジュール管理ってどうやってやるの?

  • 「Go Modules」というパッケージ管理システムが標準で組み込まれているので、パッケージ管理ソフトを入れる必要はない(ver1.11以降)
    (JavaではMavenやGradleといったビルドツール、Reactではnpmやyarnといったパッケージ外部ソフトを使う必要があった)

管理するためのファイル(大事)

  • 「go.mod」・・・モジュール名とバージョンが記載されている。(モジュール情報の管理)
  • go.sum」・・・モジュールのチェックサムが記載(改ざん防止)

利用するディレクトリ(飛ばしても可)

  • 「$GoPATH」・・・Goのモジュールが含まれるルートディレクトリ
    確認・設定方法

    設定方法は「export GoPATH=$(Go env GoPATH)」(Linuxの場合)
    ※wsl環境では終了すると環境変数がリセットされるので、以下永続化設定
    「echo 'export GoPATH=$(Go env GoPATH)' >> ~/.bashrc」
    ※.bashrcはシェル起動時に1回、実行される。

  • 「$GoPATH/pkg/mod」・・・インストールされたパッケージが入っているディレクトリ
  • 「$GoPATH/bin」・・・実行可能なコマンドディレクトリ。(migrate -versionとか使える)

コマンド

  • Go get [URL]」・・・依存パッケージモジュールをインストール(ついでにgo.modにモジュール情報が追記される)※これだけわかってれば大丈夫そう
  • 「Go init GitHubのURL」・・・go.mod、go.sumファイルが作成される
  • 「Go mod download」・・・go.mod、go.sumに記載された情報からライブラリをダウンロード
  • 「Go mod tidy」・・・ソースコードの中で利用されているパッケージをスキャンし、利用しているパッケージのみgo.modに残す。(利用されていないものはgo.modから削除される。
  • 「Go clean -modcache」・・・インストールされたパッケージを削除($GoPATH/modが削除される)
  • 「Go install [URL]」・・・コマンドラインツールをインストール(リンターやデバッガーを追加する場合こっち)

Discussion

tenkohtenkoh

こんにちは。
go installは、Goで書かれたプログラムをビルドしてインストールするためのものです。CLIのインストールに使われることが多いですね。
開発において外部のパッケージをインポートして使えるようにしたいのであれば、go getで大丈夫です。

ぽんこ2ぽんこ2

tenkoh様
ご指摘いただきありがとうございます!
ざっくりした理解で恐縮ですが、goのアプリ内で利用するものはgo get、アプリ外のCLIツールはgo installと理解をしました!

記事も修正いたしました。記事にコメントいただいたのは初めてなので嬉しかったです。
ありがとうございますm(_ _)m