Go で「go.mod file not found in current directory」が解決できない
go.mod が無いディレクトリで go run / go build を実行すると出るエラー。
`go mod init <module>` でモジュールを初期化するか、go.mod のあるディレクトリへ移動すれば解決する。
#go#go-mod#module#command
公開:
要約
go run や go build で「go.mod file not found in current directory or any parent directory」が出るのは、実行したディレクトリから親をたどっても go.mod が見つからない状態だからです。
Go はカレントディレクトリから上へ向かって go.mod を探し、ファイルシステムのルートまで到達しても無ければこのエラーを出します。
解決の基本は2つだけです。
まだモジュールが無いなら go mod init で作る、すでにあるならそのディレクトリ配下で実行する、のどちらかです。
よくある原因
- モジュール未初期化: プロジェクトに一度も
go mod initしていない - 実行場所の取り違え:
go.modのあるディレクトリの外でコマンドを叩いている - 旧 GOPATH の感覚:
$GOPATH/srcに置かないと動かないと思い込んでいる - go.mod の位置ずれ: サブモジュールや別フォルダに
go.modがあり、実行場所から届かない
解決策
1. モジュールを初期化する
プロジェクトのルートで初期化します。
モジュールパスは公開予定があればリポジトリ URL、ローカル限定なら任意の名前で構いません。
cd path/to/project
go mod init example.com/myapp
go run .go mod init が成功すると go.mod が生成され、以降はそのディレクトリ配下でビルドできます。
2. モジュールルートで実行する
すでに go.mod がある場合は、その場所か配下に移動してから実行します。
今どの go.mod を認識しているかは次で確認できます。
go env GOMOD
# 例: /home/user/project/go.mod (空文字なら未検出)3. GOPATH モードを引きずらない
Go 1.16 以降はモジュールモードが既定です。$GOPATH/src に置く必要はなく、任意のディレクトリで go mod init すれば動きます。
詳細は公式の Go Modules Referenceを参照してください。