env GO111MODULE=on cd $WORK # An import provided by two different modules should be flagged as an error. ! go build ./importx stderr '^importx[/\\]importx.go:2:8: ambiguous import: found package example.com/a/x in multiple modules:\n\texample.com/a v0.1.0 \('$WORK'[/\\]a[/\\]x\)\n\texample.com/a/x v0.1.0 \('$WORK'[/\\]ax\)$' # However, it should not be an error if that import is unused. go build ./importy # An import provided by both the main module and the vendor directory # should be flagged as an error only when -mod=vendor is set. mkdir vendor/example.com/m/importy cp $WORK/importy/importy.go vendor/example.com/m/importy/importy.go go build example.com/m/importy ! go build -mod=vendor example.com/m/importy stderr '^ambiguous import: found package example.com/m/importy in multiple directories:\n\t'$WORK'[/\\]importy\n\t'$WORK'[/\\]vendor[/\\]example.com[/\\]m[/\\]importy$' -- $WORK/go.mod -- module example.com/m go 1.13 require ( example.com/a v0.1.0 example.com/a/x v0.1.0 ) replace ( example.com/a v0.1.0 => ./a example.com/a/x v0.1.0 => ./ax ) -- $WORK/importx/importx.go -- package importx import _ "example.com/a/x" -- $WORK/importy/importy.go -- package importy import _ "example.com/a/y" -- $WORK/a/go.mod -- module example.com/a go 1.14 -- $WORK/a/x/x.go -- package x -- $WORK/a/y/y.go -- package y -- $WORK/ax/go.mod -- module example.com/a/x go 1.14 -- $WORK/ax/x.go -- package x