Protocol Buffer命名空间冲突
原文在这里。
什么是Protocol Buffer命名空间冲突?
所有链接到Go二进制文件的Protocol Buffer声明都被插入到一个全局注册表中。
每个Protocol Buffer声明(例如,枚举、枚举值或消息)都有一个绝对名称,该名称是包名称与.proto源文件中声明的相对名称的连接(例如,my.proto.package.MyMessage.NestedMessage)。Protocol Buffer语言假设所有声明都是普遍唯一的。
如果链接到Go二进制文件的两个Protocol Buffer声明具有相同的名称,那么这将导致命名空间冲突,注册表无法通过名称正确解析该声明。根据使用的Go protobuf版本不同,这可能会在初始化时引发panic,或者静默地忽略冲突,并在运行时可能导致潜在的错误。
如何解决Protocol Buffer命名空间冲突?
解决命名空间冲突的最佳方法取决于冲突发生的原因。
常见的命名空间冲突原因有:
存在vendored(供应商)的.proto文件。当一个单独的.proto文件被生成为两个或更多的Go包,并且链接到同一个Go二进制文件时,会在生成的Go包中的每个Protocol Buffer声明上发生冲突。这通常发生在一个.proto文件被vendored,并且从它生成了一个Go包,或者生成的Go包本身被vendored。用户应避免vendored,而是依赖于集中化的Go包来使用该.proto文件。
如果一个.proto文件由外部组织拥有,并且缺少go_package选项,则应与该.proto文件的所有者协调,以指定一个集中化的Go包,所有用户都可以依赖。
缺失或使用过于通用的proto包名称。如果一个.proto文件没有指定包名称或使用过于通用的包名称(例如,“my_service”),那么该文件内部的声明很可能与宇宙中的其他声明发生冲突。我们建议每个.proto文件都有一个包名称,该名称是经过深思熟虑选择的,具有普遍唯一性(例如,以公司名称为前缀)。
警告: 在.proto文件上后期更改包名称可能会导致使用扩展字段或存储在google.protobuf.Any中的消息停止正常工作。
从google.golang.org/protobuf模块的v1.26.0版本开始,当启动一个Go程序时,如果链接到其中多个冲突的Protocol Buffer名称,将报告一个严重错误。虽然最好是修复冲突的源头,但可以通过以下两种方式立即解决致命错误:
- 在编译时设置。可以在编译时通过链接器初始化的变量来指定处理冲突的默认行为:
go build -ldflags "-X google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=warn" - 在程序执行时设置。可以通过环境变量来设置处理冲突的行为,当执行特定的Go二进制文件时:
GOLANG_PROTOBUF_REGISTRATION_CONFLICT=warn ./main
声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意
Protocol Buffer命名空间冲突的更多相关文章
- [原创翻译]Protocol Buffer Basics: C#
Protocol Buffer 基础知识:c# 原文地址:https://developers.google.com/protocol-buffers/docs/csharptutorial ...
- Ggoogle Protocol Buffer的使用 (基于C++语言)
首先说明的是Protocol Buffle是灵活高效的.它的一个很好的优点(很重要的,我认为)就是后向兼容性--当我们扩展了了.proto文件后,我们照样可以用它来读取之前生成的文件. 之前已经写了关 ...
- Google Protocol Buffer的安装与.proto文件的定义
什么是protocol Buffer呢? Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准. 我理解的就是:它是一种轻便高效的结构 ...
- protocol buffer介绍(protobuf)
一.理论概述0.参考资料入门资料:https://developers.google.com/protocol-buffers/docs/javatutorial更详细的资料:For more det ...
- [翻译]Protocol Buffer 基础: C++
目录 Protocol Buffer Basics: C++ 为什么使用 Protocol Buffers 在哪可以找到示例代码 定义你的协议格式 编译你的 Protocol Buffers Prot ...
- Google Protocol Buffer的安装与.proto文件的定义(转)
转自(https://www.cnblogs.com/yinheyi/p/6080244.html) 什么是protocol Buffer呢? Google Protocol Buffer( 简称 P ...
- Protocol Buffer Basics: C#
Protocol Buffer 基础知识:c# 原文地址:https://developers.google.com/protocol-buffers/docs/csharptutorial ...
- Protocol Buffer学习教程之语法手册(二)
1.说明 此向导介绍如何使用protocol buffer language创建一个自己的protocolbuffer文件,包括语法与如何通过“.proto”文件生成数据访问的类,此处只介绍proto ...
- 详解Python Google Protocol Buffer
为什么要使用PB? PB(Protocol Buffer)是 Google 开发的用于结构化数据交换格式,作为腾讯云日志服务标准写入格式.因此用于写入日志数据前,需要将日志原始数据序列化为 PB 数据 ...
- 学习Google Protocol buffer之语法
上一篇结尾的时候问了几个问题,其实主要就是这个protoBuffer协议的语法,弄清楚语法后边才好开展工作嘛,不然大眼而对小眼儿,互相不认识,就没法玩耍了.其实就是学习怎么用google提供的这套 p ...
随机推荐
- 下载安装Ipa Guard
可以前往ipaguard工具官网下载,工具是免费下载,免费体验使用的.下载地址是https://www.ipaguard.com. 下载后解压工具便ok了,工具是绿色软件,无需其他安装流程.双击I ...
- 火山引擎 DataLeap:数据秒级生产,揭秘电商实时数仓最佳实践!
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 一年一度的「三八大促」刚刚落下帷幕,各大电商平台纷纷推出补贴.营销等玩法,力图推动持续增长.而电商平台持续增长,离 ...
- Codeforces Round #732 (Div. 2) A ~ D 个人题解记录
比赛链接:Here 1546A - AquaMoon and Two Arrays 选定两个数组元素执行以下操作: \(a_i,a_j (1\le i,j \le n)\) 一个 +1 另一个 -1, ...
- Codeforces Round #717 (Div. 2) 个人题解 A~C (A思維,B位運算,C背包DP)
1516A. Tit for Tat 題意: 給定大小為 \(n\) 的數組和可操作次數 \(k\) , 每次操作都選定兩個數(如果 \(1 \le a_i\) ),使第一個數 - \(1\) ,另一 ...
- chage详解:liunx账户密码过期时处理
公司安装elasticSearcher7.10.2版本时提示账户密码过期,可以做以下的处理方式: 一.查看账户的使用情况 chage -l baikang [root@localhost ~]# ch ...
- ShardingSphere 使用 ShardingJdbc 与 mybatis plus实现分库分表及读写分离
本文为博主原创,未经允许不得转载: 目录: 一. 官网及git 地址 二. Apache ShardingSphere 简介 三.spring boot + mybaits plus +shardin ...
- [转帖]细说:Unicode, UTF-8, UTF-16, UTF-32, UCS-2, UCS-4
https://www.cnblogs.com/malecrab/p/5300503.html 1. Unicode与ISO 10646 全世界很多个国家都在为自己的文字编码,并且互不想通,不同的语言 ...
- [转帖]TiDB Lightning 在数据迁移中的应用与错误处理实践
TiDB Lightning 在数据迁移中的应用与错误处理实践 作者简介:DBA,会点 MySQL,懂点 TiDB,Python. 个人主页:https://tidb.net/u/seiang/ans ...
- minio性能测试
minio性能测试 minio的使用 前期使用了s3fs 但是想验证一下性能相关, 所以使用今天简单验证了一下, 其实也可以使用一下fio 但是s3fs 是对象存储 没有修改 只有上传, 所以感觉还是 ...
- [转帖]alertmanager的使用
https://www.jianshu.com/p/654d59325550 一.Alertanager的安装 1.下载 下载altermanager 2.安装 # 不同的平台下载不同的安装包 w ...