goコマンド『mod』

Go言語に組み込まれているコマンド『mod』についてまとめました。

動作環境

ホストOSWindows 10 21H1(19043.2130) 64bit
WSL2
Visual Studio Code1.70.2
Docker Desktop4.12.0(85629)
Go1.19.2

構文

# パッケージ・モジュールを管理するためのmodファイルを作成する
go mod init モジュール名

# modファイルから不要な参照を削除したり、必要な記述を追加したりする
go mod tidy

サンプル

modファイルを利用する一連の流れをまとめました。

GitHub上にリポジトリを用意する

まずは本命のプログラムを作成する前に、共通で利用するようなパッケージをGitHubに公開しておきます。

GitHubにリポジトリを作成します。手順はここでは割愛。

リポジトリにモジュールをプッシュ

共通処理のプログラムを用意して、リポジトリにプッシュします。
ここではただHelloを表示するだけの関数(SayHello)を用意しました。
※main.goは確認用に用意しただけなのでプッシュはしません。

.
├── go.mod
├── hello
│   └── hello.go
│.gitignore
├── main.go
└── README.md
// go.mod

module github.com/mitikusaEngineer/GoSample

go 1.19
// hello/hello.go

package hello

import "fmt"

func SayHello(arg string) {
	fmt.Printf("Hello, %v\n", arg)
}
# .gitignore

# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib

# Test binary, built with `go test -c`
*.test

# Output of the go coverage tool, specifically when used with LiteIDE
*.out

# Dependency directories (remove the comment below to include it)
# vendor/
.devcontainer/
main.go

プッシュした結果は下記の通り。これがパッケージになります。

本命のプログラムを用意

任意の場所に下記コマンドでmodファイルを作成します。

go mod init [任意のモジュール名] # ここではsampleという名前にしました。

共通パッケージを利用する本命のプログラムを用意します。
ここで、使いたい共通パッケージのGitHub上のパスをimportに記述します。
その中のSayHello関数をmain関数で呼び出すようにします。

// main.go

package main

import (
	"github.com/mitikusaEngineer/GoSample/hello"
)

func main() {
 // GoSampleモジュールのhelloパッケージを利用
	hello.SayHello("WORLD")
}

下記コマンドでmodファイルを更新します。

go mod tidy
# go.mod

module sample

go 1.19

require github.com/mitikusaEngineer/GoSample v0.0.0-20221102143054-668c68a3c0f5

最終的な構成は下記のようになります。

.
├── go.mod
├── go.sum
└── main.go

下記コマンドプログラムを実行して、共通パッケージが呼び出されていることが確認できました。

go run *.go

==========
Hello, WORLD