
 
別のディレクトリのファイルのインポートが出来なくなります。
 
こんにちは、mabuiです。
タイトルに書いた内容でハマったので、合わせてgo moduleの扱い方について書いていきます。
まずmoduleの初期化ですが下記のディレクトリがあったとして、
| 1 2 3 4 5 6 7 | % tree . ├── db │   └── migrate.go └── models     └── user.go | 
ルートディレクトリでmoduleの初期化をします。
module名は何でも大丈夫ですが、公開する場合のパッケージ名にしておいた方がベターです。
| 1 2 | % go mod init github.com/mabuix/test | 
すると、go.modファイルができるので、importを参照しているファイルがあるディレクトリ(今回はサブディレクトリ)で
| 1 2 | % go build | 
コマンドを実行すると、ルートディレクトリ配下で使用されている依存ライブラリがダウンロードされて、
go.modファイル内にrequlerが記述され、go.sumファイルが作られます。
| 1 2 3 4 5 6 7 8 9 10 | % cat go.mod  module github.com/mabuix/test require (    github.com/go-playground/locales v0.12.1 // indirect    github.com/go-playground/universal-translator v0.16.0 // indirect    github.com/go-playground/validator v9.28.0+incompatible    ... ) | 
実行後のディレクトリは下記です。
| 1 2 3 4 5 6 7 8 9 | % tree . ├── db │   └── migrate.go ├── go.mod ├── go.sum └── models     └── user.go | 
サブディレクトリ配下のファイルは、ルートディレクトリ配下を一つのモジュールとして、他のディレクトリをインポートできるようになります。
| 1 2 3 4 5 6 7 8 | db/migrate.go package db import (    ...    "github.com/mabuix/test/models" ) | 
※サブディレクトリ内でmoduleの初期化(go mod init)を実行しないこと!