为什么“go list -m all”返回的模块比go.mod中需要的模块多?

snz8szmq  于 2023-03-06  发布在  Go
关注(0)|答案(1)|浏览(1161)

我有一个简单的模块,只需要一个外部模块,github.com/spf13/viperv1.15.0
我的模块的go.mod文件如下
github.com/me/mymodule

go 1.20

require github.com/spf13/viper v1.15.0

require (
    github.com/fsnotify/fsnotify v1.6.0 // indirect
    github.com/hashicorp/hcl v1.0.0 // indirect
    github.com/magiconair/properties v1.8.7 // indirect
    github.com/mitchellh/mapstructure v1.5.0 // indirect
    github.com/pelletier/go-toml/v2 v2.0.6 // indirect
    github.com/spf13/afero v1.9.3 // indirect
    github.com/spf13/cast v1.5.0 // indirect
    github.com/spf13/jwalterweatherman v1.1.0 // indirect
    github.com/spf13/pflag v1.0.5 // indirect
    github.com/subosito/gotenv v1.4.2 // indirect
    golang.org/x/sys v0.3.0 // indirect
    golang.org/x/text v0.5.0 // indirect
    gopkg.in/ini.v1 v1.67.0 // indirect
    gopkg.in/yaml.v3 v3.0.1 // indirect
)

如果我运行命令go list -m all,我会得到一个更长的模块列表,例如包含

cloud.google.com/go v0.105.0
cloud.google.com/go/bigquery v1.8.0
cloud.google.com/go/compute v1.14.0
cloud.google.com/go/compute/metadata v0.2.3
cloud.google.com/go/datastore v1.1.0
cloud.google.com/go/firestore v1.9.0
cloud.google.com/go/longrunning v0.3.0
cloud.google.com/go/pubsub v1.3.1
cloud.google.com/go/storage v1.14.0

这显然意味着go.mod需求不是完整的构建列表。
造成这种差异的原因是什么?
顺便说一句,我选择了构建列表中的一些模块,并询问,例如,

go mod why -m cloud.google.com/go

得到了答案

main module does not need module cloud.google.com/go
ffscu2ro

ffscu2ro1#

因为许多包都有其他依赖项,所以为了使这些导入go.mod文件的包能够工作,它们也必须被导入

相关问题