env GO111MODULE=off go list -e -f '{{.Incomplete}}' m/runbad1.go stdout true ! go run m/runbad1.go stderr 'use of internal package m/x/internal not allowed' go list -e -f '{{.Incomplete}}' m/runbad2.go stdout true ! go run m/runbad2.go stderr 'use of internal package m/x/internal/y not allowed' go list -e -f '{{.Incomplete}}' m/runok.go stdout false go run m/runok.go cd m env GO111MODULE=on go list -e -f '{{.Incomplete}}' runbad1.go stdout true ! go run runbad1.go stderr 'use of internal package m/x/internal not allowed' go list -e -f '{{.Incomplete}}' runbad2.go stdout true ! go run runbad2.go stderr 'use of internal package m/x/internal/y not allowed' go list -e -f '{{.Incomplete}}' runok.go stdout false go run runok.go -- m/go.mod -- module m -- m/x/internal/internal.go -- package internal -- m/x/internal/y/y.go -- package y -- m/internal/internal.go -- package internal -- m/internal/z/z.go -- package z -- m/runbad1.go -- package main import _ "m/x/internal" func main() {} -- m/runbad2.go -- package main import _ "m/x/internal/y" func main() {} -- m/runok.go -- package main import _ "m/internal" import _ "m/internal/z" func main() {}