`cmd/go`: 当使用`go get`删除导入图中提供包的模块时,发出警告?

aij0ehis  于 6个月前  发布在  Go
关注(0)|答案(6)|浏览(55)

你使用的Go版本是什么( go version )?

go version go1.11.4 darwin/amd64

这个问题在最新版本中是否重现?

是的,它确实重现了

你正在使用什么操作系统和处理器架构( go env )?

go env 输出

GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/U/Library/Caches/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/U/Work/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/Users/U/Work/TestProj/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/rm/sngdtnn11x3b_zp_zzyw6jl40000gn/T/go-build528112071=/tmp/go-build -gno-record-gcc-switches -fno-common"

你做了什么?

$go get github.com/miekg/dns/idn@cdb76b64a347436f019bf96ab5eb2d74e73e964b
go: finding github.com/miekg/dns/idn cdb76b64a347436f019bf96ab5eb2d74e73e964b
$grep dns go.mod
 github.com/miekg/dns v0.0.0-20171124081448-cdb76b64a347
$go mod vendor
go: finding github.com/miekg/dns/idn latest
$grep dns go.mod
 github.com/miekg/dns v1.1.1

你期望看到什么?

github.com/miekg/dns v0.0.0-20171124081448-cdb76b64a347 vendored

你实际上看到了什么?

github.com/miekg/dns v1.1.1 vendored

ma8fv8wu

ma8fv8wu1#

你遗漏了一些信息:有 no dependencies to vendor 。请提供一套我们可以遵循的完整步骤来重现这个问题。
可能需求是通过之前缺失在你的 go.mod 文件中的某个其他依赖项传入的。(如果是这样的话,go mod graph 应该能够告诉你它来自哪里。)

scratch$ go1.12beta2 mod init golang.org/issue/scratch
go: creating new go.mod: module golang.org/issue/scratch

scratch$ go1.12beta2 get github.com/miekg/dns/idn@cdb76b64a34
go: finding github.com/miekg/dns/idn cdb76b64a34
go: finding github.com/miekg/dns cdb76b64a34
go: downloading github.com/miekg/dns v0.0.0-20171124081448-cdb76b64a347
go: extracting github.com/miekg/dns v0.0.0-20171124081448-cdb76b64a347

scratch$ cat go.mod
module golang.org/issue/scratch

go 1.12

require github.com/miekg/dns v0.0.0-20171124081448-cdb76b64a347 // indirect

scratch$ go1.12beta2 mod vendor
go: no dependencies to vendor
dsekswqp

dsekswqp2#

很遗憾,我无法在最小项目中重现这个问题。

在我的项目中,我可以看到这个问题:
go get github.com/miekg/dns/idn@cdb76b64a347436f019bf96ab5eb2d74e73e964b 文件没有更新(在最小项目中它确实更新了)
go mod vendor 会在大项目中更新 go.mod 文件。

希望这能帮到你。

3df52oht

3df52oht3#

go get […] 不会更新 vendor/modules.txt 文件
go get 本身并不打算更新 vendor。(这个功能请求是 #29058 。)

k4aesqcs

k4aesqcs4#

go mod vendor 更新了大项目上的 go.mod 文件
这似乎证实了假设,即存在一些传递依赖关系,强制要求更高的最低版本。
在更大的仓库中,尝试按顺序执行以下操作:

  1. go get github.com/miekg/dns/idn@cdb76b64a347436f019bf96ab5eb2d74e73e964b
  2. go mod graph | grep github.com/miekg/dns
  3. go mod tidy
  4. go list -m github.com/miekg/dns
  5. go mod graph | grep github.com/miekg/dns
  6. go mod vendor
  7. go list -m github.com/miekg/dns
    如果版本是通过无法降级的传递依赖关系,那么该依赖关系将不会在步骤(2)中列出,版本将在步骤(4)中再次回升,并在此后保持稳定。
yi0zb3m4

yi0zb3m45#

是的,这是我遇到问题的原因:https://github.com/influxdata/platform/blob/master/go.mod#L99。非常感谢您的帮助。

您认为在这种情况下添加警告信息是否有用?
go get 本身并不打算更新 vendor,但它确实会使用最小项目更新 vendor/modules.txt

2exbekwf

2exbekwf6#

你认为在这种情况下,是否有用警告信息?
我不确定,但这肯定值得考虑。我会相应地重命名这个问题。

相关问题