三个etcd-go软件包有什么区别?

问题描述

有三种不同的etcd-go软件包,它们是:

  1. github.com/coreos/etcd
  2. go.etcd.io/etcd
  3. go.etcd.io/etcd/v3

根据提交here,所有 官方代码已将软件包从go.etcd.io/etcd更改为go.etcd.io/etcd/v3并显示以下消息:

此更改使etcd软件包与现有Go兼容 用于模块版本控制的生态系统。

但是我无法通过go.etcd.io/etcd/v3命令获得go get软件包。

那么这三个etcd-go软件包之间有什么区别?以及如何正确使用它们。

谢谢。

解决方法

问题2中的文档指向此链接

https://pkg.go.dev/go.etcd.io/etcd/clientv3?tab=doc

该软件包具有以下版本并提交哈希值

v0.5.0(ae9734e)

问题3中的文档指向此链接

https://pkg.go.dev/go.etcd.io/etcd/v3/clientv3?tab=doc

该软件包具有以下版本并提交哈希值

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"

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...