热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

etcd、grpc、protobuf兼容性问题

etcd、grpc、protobuf兼容性问题文章目录etcd、grpc、protobuf兼容性问题1.错误12.错误23.错误34.错误45.错误5近来在学习etcd,拿到一份代
etcd、grpc、protobuf兼容性问题


文章目录

  • etcd、grpc、protobuf兼容性问题
    • 1. 错误1
    • 2. 错误2
    • 3. 错误3
    • 4. 错误4
    • 5. 错误5



近来在学习 etcd, 拿到一份代码的 demo. 想跑起来看看效果。没想过这竟然是个艰难的过程,记录下来,以便大家遇到同样的问题时,可以快速解决。

protoc –-go_out=plugins=grpc:. *.proto

1. 错误1

报错如下:

2020/04/26 16:33:39 WARNING: Missing 'go_package' option in "hello.proto", please specify:option go_package = ".;protoes";
A future release of protoc-gen-go will require this be specified.
See https://developers.google.com/protocol-buffers/docs/reference/go-generated#package for more information.

这个比较好解决,按照提示把第 3 行改为第 4 行(注意:Windows下可能需要将.改为./),如下图

在这里插入图片描述

2. 错误2

go.mod 目录下执行 go mod tidy
报错如下:

go: finding github.com/golang/groupcache latest
go: etcdDemo/etcdservice importsgo.etcd.io/etcd/clientv3 tested bygo.etcd.io/etcd/clientv3.test importsgithub.com/coreos/etcd/auth importsgithub.com/coreos/etcd/mvcc/backend importsgithub.com/coreos/bbolt: github.com/coreos/bbolt@v1.3.4: parsing go.mod:module declares its path as: go.etcd.io/bboltbut was required as: github.com/coreos/bbolt

在 go.mod 中添加两行

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

再次执行 go mod tidy, 再次报错如下:

go: finding golang.org/x/net latest
go: finding github.com/coreos/go-systemd latest
go: finding github.com/coreos/pkg latest
go: finding golang.org/x/time latest
go: finding github.com/xiang90/probing latest
go: finding github.com/tmc/grpc-websocket-proxy latest
go: finding github.com/golang/groupcache latest
etcdDemo/etcdservice importsgo.etcd.io/etcd/clientv3 importsgithub.com/coreos/etcd/pkg/logutil importsgithub.com/coreos/go-systemd/journal: no matching versions for query "latest"

go 1.13 的版本导致的 (go 1.14 应该没有)
解决方法:在 go.mod 中添加

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

再次 go mod tidy , 这一项暂时通过了。

3. 错误3

执行 go build
报错如下:

D:\code\etcdDemo\server>go build
#github.com/coreos/etcd/clientv3/balancer/resolver/endpoint
E:\gocode\pkg\mod\github.com\coreos\etcd@v3.3.20+incompatible\clientv3\balancer\resolver\endpoint\endpoint.go:114:78: undefined: resolver.BuildOption
E:\gocode\pkg\mod\github.com\coreos\etcd@v3.3.20+incompatible\clientv3\balancer\resolver\endpoint\endpoint.go:182:31: undefined: resolver.ResolveNowOption
#github.com/coreos/etcd/clientv3/balancer/picker
E:\gocode\pkg\mod\github.com\coreos\etcd@v3.3.20+incompatible\clientv3\balancer\picker\err.go:37:44: undefined: balancer.PickOptions
E:\gocode\pkg\mod\github.com\coreos\etcd@v3.3.20+incompatible\clientv3\balancer\picker\roundrobin_balanced.go:55:54: undefined: balancer.PickOptions

原因 etcd3.3.20 的 release 版本要求 grpc 的版本是 v1.26.0 之前的。而此时 go.mod 里面的 google.golang.org/grpc 是 v1.29.1
解决方法:在 go.mod 里添加一句

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

4. 错误4

go build 接着报错,如下:

D:\code\etcdDemo\server>go build# etcdDemo/protoes..\protoes\hello.pb.go:292:11: undefined: grpc.SupportPackageIsVersion6
..\protoes\hello.pb.go:303:5: undefined: grpc.ClientConnInterface# etcdDemo/etcdservice..\etcdservice\resolver.go:82:4: invalid case "go.etcd.io/etcd/mvcc/mvccpb".PUT in switch on ev.Type (mismatched types "go.etcd.io/etcd/mvcc/mvccpb".Event_EventType and "github.com/coreos/etcd/mvcc/mvccpb".
Event_EventType)
..\etcdservice\resolver.go:87:4: invalid case "go.etcd.io/etcd/mvcc/mvccpb".DELETE in switch on ev.Type (mismatched types "go.etcd.io/etcd/mvcc/mvccpb".Event_EventType and "github.com/coreos/etcd/mvcc/mvccp
b"
.Event_EventType)

原因:此时设备上的 proto-gen-go 是 v1.4.0 版本,它要求 grpc 的版本是 v1.27.0 往后的,而刚才 etcd 要求 grpc 是 v.1.26.0 ! 无奈了,柿子挑软的捏吧,把 proto-gen-go 降级到能够匹配 grpc v.1.26.0 的版本。执行下面这条命令

go get -u -v github.com/golang/protobuf/protoc-gen-go@v1.2.0

之后千万别忘了,重新生成 proto

5. 错误5

继续 go build, 继续报错!!! (心态有点儿崩了。。。)

D:\code\etcdDemo\server>go build
go: finding google.golang.org/genproto latest
go: finding github.com/golang/protobuf v1.3.3# etcdDemo/etcdservice..\etcdservice\resolver.go:82:4: invalid case "go.etcd.io/etcd/mvcc/mvccpb".PUT in switch on ev.Type (mismatched types "go.etcd.io/etcd/mvcc/mvccpb".Event_EventType and "github.com/coreos/etcd/mvcc/mvccpb".
Event_EventType)
..\etcdservice\resolver.go:87:4: invalid case "go.etcd.io/etcd/mvcc/mvccpb".DELETE in switch on ev.Type (mismatched types "go.etcd.io/etcd/mvcc/mvccpb".Event_EventType and "github.com/coreos/etcd/mvcc/mvccp
b"
.Event_EventType)
..\etcdservice\resolver.go:82:4: invalid case "go.etcd.io/etcd/mvcc/mvccpb".PUT in switch on ev.Type (mismatched types "go.etcd.io/etcd/mvcc/mvccpb".Event_EventTyp
Event_EventType)
..\etcdservice\resolver.go:87:4: invalid case "go.etcd.io/etcd/mvcc/mvccpb".DELETE in switch on ev.Type (mismatched types "go.etcd.io/etcd/mvcc/mvccpb".Event_Event
b".Event_EventType)

缓缓。。。
仔细看了一下报错的内容,编译器要求 mvccpb 使用 github.com/coreos/etcd/mvcc/mvccpb 这个包,而代码中使用的是
go.etcd.io/etcd/mvcc/mvccpb 。去对应的代码文件看了一下,果然是这样。按照要求,把 github.com/coreos/etcd/mvcc/mvccpb import 进来。
继续 go build, 终于
在这里插入图片描述

那一刻,世界仿佛清静了许多。
对于程序员来说,最美好的事,莫过于 no warning, no error

————————————————
原文作者:xiaoma_nmg
转自链接:https://learnku.com/articles/43758
版权声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请保留以上作者信息和原文链接。


推荐阅读
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • Postgresql备份和恢复的方法及命令行操作步骤
    本文介绍了使用Postgresql进行备份和恢复的方法及命令行操作步骤。通过使用pg_dump命令进行备份,pg_restore命令进行恢复,并设置-h localhost选项,可以完成数据的备份和恢复操作。此外,本文还提供了参考链接以获取更多详细信息。 ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • IB 物理真题解析:比潜热、理想气体的应用
    本文是对2017年IB物理试卷paper 2中一道涉及比潜热、理想气体和功率的大题进行解析。题目涉及液氧蒸发成氧气的过程,讲解了液氧和氧气分子的结构以及蒸发后分子之间的作用力变化。同时,文章也给出了解题技巧,建议根据得分点的数量来合理分配答题时间。最后,文章提供了答案解析,标注了每个得分点的位置。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 还记得这首是什么歌吗?
    作词:MahmoudJaff,作曲:MahmoudJaff,Timeisthecurrencyofyourlife,spenditwiselyÿ ... [详细]
author-avatar
阿凡达0205
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有