別のディレクトリのファイルのインポートが出来なくなります。
こんにちは、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)を実行しないこと!