Go 每日漫谈——Go Module 的一些坑

每天和大家来漫谈 Go 语言的相关的一些知识、问题、最佳实践等。

今天是第一天,来说一说 Go Module unknown revision 的问题

简单介绍下Go Module,它是一个 Go 依赖管理工具。现在我们生成一个可执行文件,它在 go.mod 寻找依赖。

$ go install app.go

我们会使用一些依赖,这些代码在私有仓库比如 Gitlab、Github 上。执行上面命令之后,会提示下面的文字或者反复需要输入用户名密码去验证,即使你配置了 ssh keys 。

go get gihtub.com/some/denpency v0.4.5 unknown revision

所以,我们骂 go module 坑,问题太多,但其实这并不完全是因为它。它使用 go get 去获取依赖。

$ go get github.com/some/dependency

而 go get 它是以 https 的方式去获取依赖,这可以通过 build 命令 -x 参数了解到。

$ go install -x .
......; git ls-remote -q https://github.com/hu17889/go_spider

所以,我们要把 https 换成 git 方式。

git config --global url."git@github.com:".insteadOf "https://github.com/"

这类问题已经在官方 issue 提了很多次,计划在 golang 1.13 做出改进。

发布于 2019-05-16