はじめに
GoでDockerでGoサーバーを立てるとき、改めてGo Moduleって何となったので調べたことをまとめます。
Go Moduleとは
パッケージ(Package)をまとめたもの。パッケージはコードをまとめるもの。すべてのコードはパッケージに入っている。
モジュールがパッケージの依存関係を管理する。
例えばAパッケージの関数がBパッケージの関数を使用するとする。
つまり、AパッケージはBパッケージがないと動かない、AはBに依存しているということになる。
補足:goはmainパッケージのmain関数から処理が始まる。
go mod でGoモジュールを作成する
goプログラムが入っているフォルダ内で、以下のコマンドを実行することでモジュールが作成できる。
ユニークな名前は、公開する場合はgithubのリポジトリ名、
非公開の場合はローカルでユニークな名前を付ける。
ユニークな名前とは、世界(非公開の場合はローカルで)同じモジュール名がないようにすること。
モジュールを参照するとき、同じ名前のモジュールがあったらどっちのモジュールを参照すべきかわからなくなるため、ユニークな名前を付ける。
go mod init ユニークな名前
以下のようなgo.modファイルがGoのソースフォルダのルート直下に作成される。
module ユニークな名前
go 1.18
フォルダ構成は以下の例が挙げられる。
ルート直下のgo.modがGoProgram内のmainパッケージ、testパッケージをまとめて管理しているイメージ。
GoProgram/
├sample/
│ ├main.go ※package main
│ └test/
│ └test.go ※package test
└go.mod
参考記事
go modに記載してあること
requireやreplaceなど
参考記事
go.sumファイル
go getの後に作成される
参考記事
「go get」 「go mod tidy」 「go install」コマンドについて
go getで標準以外のリポジトリをインストールできる。
go mod tidyで外部に作成されたモジュールをダウンロードする。
標準以外を使用する場合はgo mod tidy必須かと。
詳しくは使用するときに調べる。
参考記事
go mod完全に理解した