在golang的包管理使用中遇到很多坑,这篇文章用于记录自己遇到的一些头痛的问题并做个笔记方便以后查找

获取特定版本的golang包

最近在写一个hbase的SDK,遇到的一个问题是thrift的包不兼容问题。Hbase的thrift是使用0.9.x的包编译出来的,使用其他的版本的thrift会有些许报错,唯一的办法是获取golang的thrift的相应的版本。

最初以为使用可以直接获取对应的包(没想到没有对应的tag)

go get git.apache.org/thrift.git/lib/go/thrift@v0.9.3

# 结果很amazing啊,没有对应的tag???

现在只能通过commit信息来下载相应的包。我找到了github上thrift的项目地址,找到golang的路径(lib/go)

apache/thrift​github.com

然后切换到分支0.9.3.2,找到右上角的commit信息

2d2991df5ebc98bba8d958e46f63c9b4.png

然后尝试了第二次失败

go get git.apache.org/thrift.git/lib/go/thrift/...@33dcbd0

# 我也不清楚为什么没有效果,暂时先不管了,估计有可能是网络问题
可能有小伙伴会觉得明明是github的路径为什么get这个包的路径也不一样,而且golang有很多类似的情况。这个问题可以看一下官方文档就明白了。
The Go Programming Language​golang.google.cn
8d868a84bc6a85cfc53e2e6779d90fd7.png

既然这个域名下down不下来,那就换成github该项目的域名再尝试下

go get github.com/apache/thrift/lib/go/thrift/...@33dcbd0

# 这次是成功的!!!!

但还没有结束,因为thrift编译出来的文件引用的是http://git.apache.org,所以还得再go.mod中替换下包

require git.apache.org/thrift.git v0.9.3

replace git.apache.org/thrift.git v0.9.3 => github.com/apache/thrift v0.0.0-20200208223004-33dcbd08c080

这下就可以引入这个指定的包了。

golang的包管理的具体内容可以看官方文档,这里只是给一下参考的解决方案的思路和思考的方向。