All services go.mod
files point the github.com/jybp/goworkconflict/dep
pkg to the same dep
folder but servicec
specifies a different relative path.
By default without a go.work
go tools won't work when ran from the repo root, but will when ran from each module:
$ mv go.work go.work.tmp
$ go test ./...
pattern ./...: directory prefix . does not contain main module or its selected dependencies
$ go test ./servicea
go: cannot find main module, but found .git/config in /goworkconflict
to create a module there, run:go test ./servicea
go mod init
$ cd ./servicea
$ go test
PASS
ok github.com/jybp/goworkconflict/servicea 0.206s
$ cd ../
$ mv go.work.tmp go.work
Using go test
with the current go.work
(only servicea
and serviceb
specified) makes servicec
test runs fail.
$ go test ./...
pattern ./...: directory prefix . does not contain modules listed in go.work or their selected dependencies
$ go test ./servicea ./serviceb ./dep
ok github.com/jybp/goworkconflict/servicea 0.191s
ok github.com/jybp/goworkconflict/serviceb 0.309s
ok github.com/jybp/goworkconflict/dep 0.428s
$ cd subfolder/servicec
$ go test
current directory is contained in a module that is not one of the workspace modules listed in go.work. You can add the module to the workspace using:
go work use .
$ cd ../../
$ go work sync
Adding dep
in go.work
has the same results:
$ go work use dep
$ go test ./...
pattern ./...: directory prefix . does not contain modules listed in go.work or their selected dependencies
$ go test ./servicea ./serviceb ./dep
ok github.com/jybp/goworkconflict/servicea 0.190s
ok github.com/jybp/goworkconflict/serviceb 0.126s
ok github.com/jybp/goworkconflict/dep 0.232s
$ cd subfolder/servicec
$ go test
current directory is contained in a module that is not one of the workspace modules listed in go.work. You can add the module to the workspace using:
go work use .
$ cd ../../
$ go work sync
Adding subfolder/servicec
in go.work
produces a new error:
$ go work use subfolder/servicec
$ go test ./...
conflicting replacements found for github.com/jybp/goworkconflict/dep@v0.0.0 in workspace modules defined by /goworkconflict/serviceb/go.mod and /goworkconflict/subfolder/servicec/go.mod
$ go work sync
conflicting replacements found for github.com/jybp/goworkconflict/dep@v0.0.0 in workspace modules defined by /goworkconflict/serviceb/go.mod and /goworkconflict/subfolder/servicec/go.mod
golang/go#51204 related?