你用的是什么版本的Go(go version
)?
$ go 版本 v1.12
模块 yiigo 有标签v3.0.0
,但是当我运行go get github.com/iiinsomnia/yiigo
时,它会得到v2.1.0
,当我运行go get github.com/iiinsomnia/yiigo@v3.0.0
时,它会显示:go get github.com/iiinsomnia/yiigo@v3.0.0: unexpected end of JSON input
主要问题似乎是 v3.0.0 版本的iiinsomnia/yiigo
在其go.mod
文件中的module
行末尾缺少所需的/v3
:
https://github.com/iiinsomnia/yiigo/blob/v3.0.0/go.mod#L1
module github.com/iiinsomnia/yiigo <<<< wrong, missing required /v3 at end
go 1.12
require (
github.com/go-sql-driver/mysql v1.4.1-0.20190217072658-972a708cf979
...
此后,这种情况得到了纠正。
因为它现在是一个正确的 v3 模块,所以go get
命令应该在@
之前包含一个/v3
:
module github.com/iiinsomnia/yiigo/v3@v3.2.2
从 Go 模块维基:
如果模块是版本 v2 或更高版本,则模块的主要版本必须作为/vN 包含在 go.mod 文件(例如,
module github.com/my/mod/v2
、require github.com/my/mod/v2 v2.0.0
)和包导入路径(例如import "github.com/my/mod/v2/mypkg"
)中使用的模块路径末尾。
此外,看起来打开了一个相关问题,理论上是奇怪的"JSON 输入意外结束"错误可能来自某个代理:
https://github.com/golang/go/issues/30494
我过去完成此操作的一种方法是使用git tags
- 对于您的情况,这应该可以正常工作。
步骤:
go get -u github.com/iiinsomnia/yiigo
cd ~/go/src/github.com/iiinsomnia/yiigo
git tag
- 在列表中找到要安装的代码发布版本
git checkout v3.0.0
go install
这将覆盖以前安装在 GOPATH 中的软件包,并为您签出的特定标记版本覆盖新版本。
注意:自从 go 模块发布以来,可能有更好的方法来做到这一点。
这篇相关文章还提供了有关如何检索项目源代码的特定版本的替代解决方案,这些解决方案可能会提供一些帮助。