你正在使用哪个版本的Go( go version
)?
$ go version
go version go1.11.4 darwin/amd64
这个问题在最新版本中是否重现?
是的。
你正在使用什么操作系统和处理器架构( go env
)?
go env
输出
$ go env
GOARCH="amd64"
GOBIN="/Users/d.lopez/go/bin"
GOCACHE="/Users/d.lopez/Library/Caches/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/d.lopez/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/Cellar/go/1.11.4/libexec"
GOTMPDIR=""
GOTOOLDIR="/usr/local/Cellar/go/1.11.4/libexec/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/Users/d.lopez/go/src/gitlab.mycompany.com/my-user/my-project/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/6n/q8wt03m13_x3w6v5__mzkwgc0000gn/T/go-build342969942=/tmp/go-build -gno-record-gcc-switches -fno-common"
你做了什么?
go get github.com/sideshow/apns2@v0.14
你期望看到什么?
尽管它没有有效的semver标签(补丁号缺失),但包 apns2
已成功添加到 go.mod
文件并使用伪版本或类似的东西下载到 pkg/mod
。
你看到了什么?
这个难以理解的错误(我花了几分钟才意识到缺少一个补丁版本)
go get github.com/sideshow/apns2@v0.14: no matching versions for query "v0.14"
解决方法
我找到的唯一解决方法是在所需仓库的 v0.14
标签内的最新提交SHA上进行固定。
8条答案
按热度按时间gc0ot86w1#
这与 #33010 问题基本相同。
不幸的是,这种行为无论如何都会让人感到有些困惑:如果一个仓库有一个标签
v0.14
和一个标签v0.14.1
,而你运行go get […]@v0.14
,你应该得到该前缀的最高补丁版本(v0.14.1
)还是具有精确匹配文本的标签(v0.14
)?答案似乎并不明显。总的来说,这应该只是一个过渡性问题:我们期望,向前发展,为
go
命令标记版本的人将使用完整的语义版本进行标记。CC @jayconrod
cnh2zyt32#
我认为这是一个更大的问题,对于分支来说。我认为人们很可能会命名主要或次要的发布分支,如
v2
或v2.3
。我想知道我们是否应该实际上放弃这些名称的查询功能?我的印象是大多数人不知道或者不使用它。获取其中一个分支的最新信息的能力对我来说似乎更有用。
iibxawm43#
我支持放弃基于前缀的查询,转而支持分支名称。不过,也许可以将其作为一个单独的提案提交?
h79rfbju4#
FWIW,我同意@jayconrod的#29731(评论)将查询前缀改为更好地支持分支名称。我认为这是一个净收益,并且更好地符合人们对常见情况下发生的事情的直觉。
两个相关的评论:
@v2
作为前缀并不是那么有用,因为你需要在模块路径的末尾有/v2
。go get 'foo@>=v1.3'
,这与使用v1.3
作为前缀几乎具有相同的功能。(我怀疑大约相同数量的gophers知道这两个中的每一个,也就是说,可能大多数gophers目前都不知道其中一个)。它们的功能并不完全相同,包括在这个例子中,如果有一个角落情况存在v1.4.0版本但没有v1.3.x版本(尽管我认为这个特定的角落情况可能是违反了semver规范)。在实践中,它们可能足够接近以解决类似的用例,从而减轻使用前缀的损失。hec6srdp5#
同意。我认为我们将尝试将其切换到1.14版本。
wmvff8tz6#
这并没有达到1.14版本。我们或许可以在1.15版本中再次尝试。
i7uaboj47#
在go1.17中,go get已被弃用,将打印出明确的错误信息。
缺少补丁号触发了一条关于格式的消息,但没有提到补丁级别,这似乎是合适的:
问题似乎已经解决。
ctehm74n8#
这仍然在模块内重现: