Etcd使用go module的灾难

在使用Etcd进行开发时,开启Go Module功能可能会遇到一系列问题,包括库依赖冲突、模块路径不一致、代码与新版本库冲突等。通过`go mod replace`可以暂时解决部分问题,但可能会引发其他依赖冲突。Etcd项目本身存在如bbolt库的module名称与package path不一致的问题,以及与grpc版本冲突的情况。更新Etcd到最新版本也遇到困难,因为项目并未正确设置或更新其go.mod文件。这些问题暴露了Go Module在实际使用中的挑战,以及开源项目采用Go Module的错误姿势。
摘要由CSDN通过智能技术生成

最近几个月,或者最近一年,使用etcd做开发的朋友,如果你开启了go module的功能的话,没有出现翻车的现象吗?或者go get -u .更新一下项目依赖试试看。

因为我使用visual studio code的方式是打开整个GOPATH路径,而gopls对于整个GOPATH并不友好,非常的慢,所以我设置了全局变量GO111MODULE=off,还是采用传统的老的库依赖方式。

但是我并不排斥使用go module,并且觉得它对解决库依赖的冲突至关重要,所以我一般在项目中也会是不是的开启go module,更新一下go.mod。但是目前看来go module的推广起来问题还是重重,主要包括下面几个原因:

  1. go module本身的bug

  2. 使用go module的项目使用方式有问题

  3. 一些库没有采用go module

由于go module的一些bug,以及开源项目使用go module的错误姿势,go module模式下导致使用一些代码库困难重重。我们以etcd为例,看看目前使用etcd的翻车现场。

翻车例子

假如看了很多go module的励志文章,信心满满,准备使用etcd开发一些分布式的应用。很显然,相对于zookeeper在java生态圈的地位,在Go生态圈我们自然会选择etcd去做开发。

那么现在第一步,我们创建一个文件夹,生成go module文件:

123
➜  workspace mkdir abc && cd abc➜  abc go mod init  example.com/mgo: creating new go.mod: module example.com/m

加入etcd库:

1234567891011121314151617
➜  abc go get -u -v go.etcd.io/etcdgo: go.etcd.io/etcd upgrade => v3.3.20+incompatiblego: finding module for package github.com/coreos/etcd/etcdmaingo: found github.com/coreos/etcd/etcdmain in github.com/coreos/etcd v3.3.20+incompatiblego: finding module for package sigs.k8s.io/yamlgo: finding module for package google.golang.org/grpc/codesgo: finding module for package github.com/coreos/pkg/capnsloggo: finding module for package google.golang.org/grpc/metadata......go: found github.com/golang/groupcache/lru in github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57ego: go.etcd.io/etcd imports	github.com/coreos/etcd/etcdmain imports	github.com/coreos/etcd/etcdserver imports	github.com/coreos/etcd/mvcc/backend imports	github.com/coreos/bbolt: github.com/coreos/bb
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值