Go で「go.mod file not found in current directory」が解決できない
go.mod が無いディレクトリで go run / go build を実行すると出るエラー。go mod init <module> でモジュールを初期化するか、go.mod のあるディレクトリへ移動すれば解決する。
公開: 更新:
要約
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 run を実行すると失敗し、そのとき go env GOMOD は空文字ではなく /dev/null を返す。
go mod init を通したあとは GOMOD が実ファイルのパスに変わり、同じ go run がそのまま通る。
$ go run .
go: go.mod file not found in current directory or any parent directory; see 'go help modules'
終了コード: 1$ go env GOMOD
/dev/null$ go mod init example.com/myapp
go: creating new go.mod: module example.com/myapp
go: to add module requirements and sums:
go mod tidy
終了コード: 0$ go env GOMOD
/tmp/tmp.cusn3FWWW4/go.mod$ go run .
hello from module
終了コード: 0— 2026-08-31 時点の出力
検証環境
- 検証日
- 実行環境
golang:1.23Debian GNU/Linux 12 (bookworm)- バージョン
- Python 3.11.2
- Git 2.39.5
- Go 1.23.12
この記事の「実行例」は、上記の環境で実際にコマンドを実行して得られた出力をそのまま掲載しています。 再現手順はリポジトリの検証スクリプトとして管理し、定期的に再実行して出力を更新しています。
よくある原因
- モジュール未初期化: プロジェクトに一度も
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 (見つからないときは /dev/null。Windows では NUL)3. GOPATH モードを引きずらない
Go 1.16 以降はモジュールモードが既定です。$GOPATH/src に置く必要はなく、任意のディレクトリで go mod init すれば動きます。
詳細は公式の Go Modules Reference(新しいタブで開く)を参照してください。