env GO111MODULE=on [short] skip # golang.org/x/internal should be importable from other golang.org/x modules. go mod edit -module=golang.org/x/anything go get . # ...and their tests... go test stdout PASS # ...but that should not leak into other modules. go get ./baddep ! go build ./baddep stderr golang.org[/\\]notx[/\\]useinternal stderr 'use of internal package golang.org/x/.* not allowed' # Internal packages in the standard library should not leak into modules. go get ./fromstd ! go build ./fromstd stderr 'use of internal package internal/testenv not allowed' # Dependencies should be able to use their own internal modules... go mod edit -module=golang.org/notx go get ./throughdep # ... but other modules should not, even if they have transitive dependencies. go get . ! go build . stderr 'use of internal package golang.org/x/.* not allowed' # And transitive dependencies still should not leak. go get ./baddep ! go build ./baddep stderr golang.org[/\\]notx[/\\]useinternal stderr 'use of internal package golang.org/x/.* not allowed' # Replacing an internal module should keep it internal to the same paths. go mod edit -module=golang.org/notx go mod edit -replace golang.org/x/internal=./replace/golang.org/notx/internal go get ./throughdep go get ./baddep ! go build ./baddep stderr golang.org[/\\]notx[/\\]useinternal stderr 'use of internal package golang.org/x/.* not allowed' go mod edit -replace golang.org/x/internal=./vendor/golang.org/x/internal go get ./throughdep go get ./baddep ! go build ./baddep stderr golang.org[/\\]notx[/\\]useinternal stderr 'use of internal package golang.org/x/.* not allowed' -- go.mod -- module TBD go 1.12 -- useinternal.go -- package useinternal import _ "golang.org/x/internal/subtle" -- useinternal_test.go -- package useinternal_test import ( "testing" _ "golang.org/x/internal/subtle" ) func Test(*testing.T) {} -- throughdep/useinternal.go -- package throughdep import _ "golang.org/x/useinternal" -- baddep/useinternal.go -- package baddep import _ "golang.org/notx/useinternal" -- fromstd/useinternal.go -- package fromstd import _ "internal/testenv" -- replace/golang.org/notx/internal/go.mod -- module golang.org/x/internal -- replace/golang.org/notx/internal/subtle/subtle.go -- package subtle // Ha ha! Nothing here! -- vendor/golang.org/x/internal/go.mod -- module golang.org/x/internal -- vendor/golang.org/x/internal/subtle/subtle.go -- package subtle // Ha ha! Nothing here!