go work init go work use . ./sub # Verify that the go.mod files for both modules in the workspace are tidy, # and add missing go.sum entries as needed. cp go.mod go.mod.orig go mod tidy cmp go.mod go.mod.orig cd sub cp go.mod go.mod.orig go mod tidy cmp go.mod go.mod.orig cd .. go list -m all stdout '^rsc\.io/quote v1\.5\.1$' stdout '^rsc\.io/sampler v1\.3\.1$' # Now remove the module dependencies from the module cache. # Because one module upgrades a transitive dependency needed by another, # listing the modules in the workspace should error out. go clean -modcache env GOPROXY=off ! go list -m all stderr '^go: rsc.io/sampler@v1.3.0: module lookup disabled by GOPROXY=off$' -- example.go -- package example import _ "rsc.io/sampler" -- go.mod -- module example go 1.19 require rsc.io/sampler v1.3.0 require ( golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c // indirect rsc.io/testonly v1.0.0 // indirect ) -- sub/go.mod -- module example/sub go 1.19 require rsc.io/quote v1.5.1 require ( golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c // indirect rsc.io/sampler v1.3.1 // indirect ) -- sub/sub.go -- package example import _ "rsc.io/quote"