Consider the following setup:
go.mod
module example.com/main
require example.com/sub dummy
replace example.com/sub => ./sub
sub/go.mod
module example.com/sub
If I run go mod tidy
in the main directory, it emits
go: errors parsing go.mod:
[…]/go.mod:3: unrecognized import path "example.com/sub": reading https://example.com/sub?go-get=1: 404 Not Found
Even if the URL existed, my understanding is that due to the replace
directive, go mod
has no business whatsoever with the original source because I replaced it. So why is it querying the source then? And how can I prevent that?
I already tried to set GOPROXY=off
which resulted in
[…]/go.mod:3: module lookup disabled by GOPROXY=off
CodePudding user response:
Just assign a proper version number like v0.0.0
and it will work.
Go modules use the semantic versioning model and cannot have arbitrary versions like dummy
. The supported version formats are described in Module version numbering.
Bonus note: avoid nesting Go modules. That may lead to a messy setup and problems with tooling down the road.
CodePudding user response:
Looking at go mod tidy
, try first (Go 1.16 , from issue 26603):
git mod tidy -e
The
-e
flag causestidy
to attempt to proceed despite errors encountered while loading packages.