项目中使用go mod管理etcd client时遇到的问题

go mod etcd problems

Posted by alovn on June 2, 2020

ETCD在Golang 生态圈中有举足轻重的地位,很多开源项目用到了它,可以用它做配置中心、服务发现。但是相信不少人在使用go client时会遇到以下几个问题,这里暂且做个简单的记录。

问题一

1
cannot find module providing package github.com/coreos/go-systemd/journal

解决方式有两种: 第一种:从github拉取go-systemd代码保存到 $GOPATH src 下,然后replace go.mod中的go-systemd

1
2
vim go.mod
replace github.com/coreos/go-systemd => /workspace/go/src/github.com/coreos/go-systemd

第二种: 直接replace并指定版本

1
replace github.com/coreos/go-systemd => github.com/coreos/go-systemd/v22 v22.0.0

问题二

1
2
module declares its path as: go.etcd.io/bbolt
            but was required as: github.com/coreos/bbolt

解决(这里来回replace两次竟然就好了,很是神奇):

1
2
replace github.com/coreos/bbolt v1.3.4 => go.etcd.io/bbolt v1.3.4
replace go.etcd.io/bbolt v1.3.4 => github.com/coreos/bbolt v1.3.4

问题三

关于grpc 的错误,会有一些定义找不到,这是因为Etcd的代码和新版的grpc v1.27.0有冲突,所有需要让项目依赖老版本的grpc。

解决:

1
replace google.golang.org/grpc => google.golang.org/grpc v1.26.0