protocol-buffers namespace conflict
在运行grpc服务,加载*.pb.go时可能会报冲突错误,如文件名命名冲突:
其实针对文件名冲突的错误处理开发者有移除过"文件冲突检测":
https://github.com/protocolbuffers/protobuf-go/commit/febffdd88e85cb4402205142aaa1a4cc64d0d375
后来发现有问题又加上了"文件冲突检测":
https://github.com/protocolbuffers/protobuf-go/commit/21e33cc91079beb975323466e237f2486ea29c10
protocol-buffers命名空间冲突的几种情况:
注意package和go_package没有必然联系,下面说的package是proto里面的package不是go的引入包
- file冲突, 注册的时候会检查文件(即source)冲突
- <pkg name>.<entity name>不能冲突,<pkg name>.<entity name>也不能和<pkg name>冲突。如package叫"A.B", 如果此时另外一个package叫"A",里面有个"B"的message,那么这个message的fullName叫做“A.B”就会和前面的package "A.B"冲突。package的名字可以相同,比如可以有两个package都叫"A"
protocol buffer冲突检查相关的代码:
https://github.com/protocolbuffers/protobuf-go/blob/master/reflect/protoregistry/registry.go
filesByPath主要检查文件冲突, descsByName来检查各类型之间fullName有没有相互冲突
如果实在需要更改冲突处理策略,可以运行时指定命令或者配置环境变量:
参考:
3 声望
0 粉丝
推荐阅读
go官方的一个bug导致不会主动关闭http Request Body
代码版本:go1.20.2我们知道在用go的http client时不需要我们主动关闭Request Body,下面是Client.Do的源码使用说明:
AVOli阅读 512
Golang 中 []byte 与 string 转换
string 类型和 []byte 类型是我们编程时最常使用到的数据结构。本文将探讨两者之间的转换方式,通过分析它们之间的内在联系来拨开迷雾。
机器铃砍菜刀赞 24阅读 58.3k评论 2
年度最佳【golang】map详解
这篇文章主要讲 map 的赋值、删除、查询、扩容的具体执行过程,仍然是从底层的角度展开。结合源码,看完本文一定会彻底明白 map 底层原理。
去去1002赞 16阅读 11.6k评论 2
年度最佳【golang】GMP调度详解
Golang最大的特色可以说是协程(goroutine)了, 协程让本来很复杂的异步编程变得简单, 让程序员不再需要面对回调地狱, 虽然现在引入了协程的语言越来越多, 但go中的协程仍然是实现的是最彻底的. 这篇文章将通过分析...
去去1002赞 15阅读 12k评论 4
万字详解,吃透 MongoDB!
MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统,由 C++ 编写的。MongoDB 提供了 面向文档 的存储方式,操作起来比较简单和容易,支持“无模式”的数据建模,可以存储比较复杂的数据类型,是一款非常...
JavaGuide赞 8阅读 1.7k
数据结构与算法:二分查找
一、常见数据结构简单数据结构(必须理解和掌握)有序数据结构:栈、队列、链表。有序数据结构省空间(储存空间小)无序数据结构:集合、字典、散列表,无序数据结构省时间(读取时间快)复杂数据结构树、 堆图二...
白鲸鱼赞 9阅读 5.3k
【golang】sync.WaitGroup详解
上一期中,我们介绍了 sync.Once 如何保障 exactly once 语义,本期文章我们介绍 package sync 下的另一个工具类:sync.WaitGroup。
去去1002赞 13阅读 31.3k评论 2
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。