env GO111MODULE=on [short] skip # Populate go.sum. go mod tidy cp go.mod go.mod.orig go list -test all stdout rsc.io/quote stdout golang.org/x/text/language # why a package? go mod why golang.org/x/text/language cmp stdout why-language.txt # why a module? go mod why -m golang.org... cmp stdout why-text-module.txt # why a package used only in tests? go mod why rsc.io/testonly cmp stdout why-testonly.txt # why a module used only in a test of a dependency? go mod why -m rsc.io/testonly cmp stdout why-testonly.txt # test package not needed go mod why golang.org/x/text/unused cmp stdout why-unused.txt # vendor doesn't use packages used only in tests. go mod why -vendor rsc.io/testonly cmp stdout why-vendor.txt # vendor doesn't use modules used only in tests. go mod why -vendor -m rsc.io/testonly cmp stdout why-vendor-module.txt # test multiple packages go mod why golang.org/x/text/language golang.org/x/text/unused cmp stdout why-both.txt # test multiple modules go mod why -m rsc.io/quote rsc.io/sampler cmp stdout why-both-module.txt # package in a module that isn't even in the module graph # (https://golang.org/issue/26977) go mod why rsc.io/fortune cmp stdout why-missing.txt # None of these command should have changed the go.mod file. cmp go.mod go.mod.orig -- go.mod -- module mymodule require rsc.io/quote v1.5.2 -- x/x.go -- package x import _ "mymodule/z" -- y/y.go -- package y -- y/y_test.go -- package y import _ "rsc.io/quote" -- z/z.go -- package z import _ "mymodule/y" -- why-language.txt -- # golang.org/x/text/language mymodule/y mymodule/y.test rsc.io/quote rsc.io/sampler golang.org/x/text/language -- why-unused.txt -- # golang.org/x/text/unused (main module does not need package golang.org/x/text/unused) -- why-text-module.txt -- # golang.org/x/text mymodule/y mymodule/y.test rsc.io/quote rsc.io/sampler golang.org/x/text/language -- why-testonly.txt -- # rsc.io/testonly mymodule/y mymodule/y.test rsc.io/quote rsc.io/sampler rsc.io/sampler.test rsc.io/testonly -- why-vendor.txt -- # rsc.io/testonly (main module does not need to vendor package rsc.io/testonly) -- why-vendor-module.txt -- # rsc.io/testonly (main module does not need to vendor module rsc.io/testonly) -- why-both.txt -- # golang.org/x/text/language mymodule/y mymodule/y.test rsc.io/quote rsc.io/sampler golang.org/x/text/language # golang.org/x/text/unused (main module does not need package golang.org/x/text/unused) -- why-both-module.txt -- # rsc.io/quote mymodule/y mymodule/y.test rsc.io/quote # rsc.io/sampler mymodule/y mymodule/y.test rsc.io/quote rsc.io/sampler -- why-missing.txt -- # rsc.io/fortune (main module does not need package rsc.io/fortune)