问题描述
有三种不同的etcd-go软件包,它们是:
根据提交here,所有
官方代码已将软件包从go.etcd.io/etcd
更改为go.etcd.io/etcd/v3
并显示以下消息:
此更改使etcd软件包与现有Go兼容 用于模块版本控制的生态系统。
但是我无法通过go.etcd.io/etcd/v3
命令获得go get
软件包。
那么这三个etcd-go软件包之间有什么区别?以及如何正确使用它们。
谢谢。
解决方法
问题2中的文档指向此链接
该软件包具有以下版本并提交哈希值
v0.5.0(ae9734e)
问题3中的文档指向此链接
该软件包具有以下版本并提交哈希值
v3.3.0(c20cc05)
etcd在最新版本中将进行重大更改,因此将模块路径更改为与旧路径不同。这是Golang官方博客中推荐的约定。
阅读此博客。 https://blog.golang.org/v2-go-modules 即使它们都指向同一个仓库,您也必须像下面一样以不同的方式导入这些版本。您可以从存储库根目录中的go.mod文件中找到正确的模块路径。
导入“ go.etcd.io/etcd/clientv3”
,导入“ go.etcd.io/etcd/v3/clientv3”
客户端v3.4
中存在一个已知问题,其中go get
失败。看到此问题:https://github.com/etcd-io/etcd/issues/11154
尽管由于v3.5
已(已)修复了问题,但该版本尚未发布(撰写本文时)。
有一些解决方法可以解决上述问题。对我们有用的一个方法是规避etcd
的错误实现的go模块,并将版本直接固定在我们的go.mod文件中的提交中:
require go.etcd.io/etcd v0.0.0-20200520232829-54ba9589114f
然后使用以下命令导入clientv3
:
import "go.etcd.io/etcd/clientv3"