当前位置: 首页 > 知识库问答 >
问题:

仅放置。存储库中的协议缓冲区文件?

松博耘
2023-03-14

我想知道关于源存储库(例如git),协议缓冲区的最佳实践是什么:

我是否必须只放置。是否允许使用源代码的任何人使用protoc编译器重新生成类代码?或者两者兼而有之是最好的做法。proto编译器生成的proto文件和源代码?

共有2个答案

王曜文
2023-03-14

如果您的项目通常以其源代码形式使用(例如,每个用户都应该自己编译的库或程序),我会提供具有生成文件的可用发布包。

但我不会将生成的文件直接放入存储库。如果大多数用户将使用已编译的二进制文件,那么提供易于编译的源程序包也不是那么重要。protobuf生成器随后成为另一个构建依赖项。

柴彬
2023-03-14

如果可以避免的话,永远不要签入生成的代码。

如果签入生成的代码,则会面临多种风险,例如:

  • 您可能会失去正确重新生成代码的知识。如果它不是作为构建的一部分自动化的,那么很容易忘记记录,或者让文档出错

如果出于某种原因,您必须签入生成的代码,我强烈建议创建一个自动测试,检查签入的代码是否与新运行时protoc生成的代码匹配。(例如,protobuf存储库本身包含为描述符生成的代码的签入副本。proto,因为编译protoc时需要此代码,从而创建循环依赖关系。但有一个单元测试可以检查签入的代码是否与protoc生成的代码匹配。)

 类似资料:
  • 我有一个二进制数据缓冲区,我想存储在协议缓冲区中。 在留档(https://developers.google.com/protocol-buffers/docs/proto#scalar)中,它说类型等价于C中的。我无法相信这一点,所以我不得不尝试它,是的,这似乎是这样... 本协议: 给出一个包含以下内容的消息定义: 公共setter/getter API如下所示: 当然,这不是在消息中存储二

  • 试图使用Ionic 4中的协议缓冲区进行编码 我已经下载了协议并用它来生成一堆_pb.js文件,每个. proto文件一个。很好。 首先关注原型示例。这是示例代码: 我做了一些更改以匹配我的文件。更改proto文件的名称。但是我的proto文件中没有包名称。所以我只是使用了消息名称。首先这是我的. proto文件的开头: 下面是我修改后的代码: 这似乎不起作用。我的控制台显示: 我相信我已经成功地

  • 我是协议缓冲区的新手,我想知道是否可以搜索协议缓冲区二进制文件并以结构化格式读取数据。例如,如果我的.proto文件中的一条消息有4个字段,我希望序列化该消息,并将多条消息写入一个文件,然后在该文件中搜索特定的字段。如果我找到该字段,我希望以与写入时相同的结构化格式读回消息。对于协议缓冲区,这是可能的吗?如果可能,任何示例代码或示例都将非常有用。谢谢

  • 我目前在我的protoc.exe.旁边有一个名为addressbook.proto的文件,我在生成. h和. cc文件时遇到了困难 然而,我得到以下回应 关于我可能做错了什么有什么建议吗?

  • 我试着按照你的指示去做https://github.com/golang/protobuf和https://github.com/google/protobuf/releases安装协议缓冲区。在我将bin路径从下载文件夹添加到之后,我试图运行,但它显示 有没有办法判断我是否正确安装了protobuf? 谢谢

  • 问题内容: 我正在使用gSoap将旧式C 系统重构为SOA。我们遇到了一些性能问题(非常大的XML),因此我的领导要我看一下协议缓冲区。我做到了,它看起来非常酷(我们需要C 和Java支持)。但是协议缓冲区是仅用于序列化的解决方案,现在我需要将其发送到Java前端。从C ++和Java角度来看,我应该使用什么来通过HTTP(只是内部网络)发送那些序列化的内容? PS。另一个人试图加速我们的gSoa