できない.dev

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 rungo build で「go.mod file not found in current directory or any parent directory」が出るのは、実行したディレクトリから親をたどっても go.mod が見つからない状態だからです。

Go はカレントディレクトリから上へ向かって go.mod を探し、ファイルシステムのルートまで到達しても無ければこのエラーを出します。

解決の基本は2つだけです。
まだモジュールが無いなら go mod init で作る、すでにあるならそのディレクトリ配下で実行する、のどちらかです。

よくある原因

  1. モジュール未初期化: プロジェクトに一度も go mod init していない
  2. 実行場所の取り違え: go.mod のあるディレクトリの外でコマンドを叩いている
  3. 旧 GOPATH の感覚: $GOPATH/src に置かないと動かないと思い込んでいる
  4. 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を参照してください。

この記事は役立ちましたか?