问题标签 [proto3]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
size - 我可以为 protobuf 中的数字设置最大值吗?
在 protobuf 中,我们只能选择使用有符号或无符号 32 位或 64 位整数来限制值的范围。
但是,我要定义的数据结构包含 8 位、16 位和 32 位整数的混合,以节省嵌入式设备的空间。在它们上,数据结构的实现也有所不同,并且需要为某些字段保留特殊值,因此它们的最大数量不是 2 的幂。
在这些嵌入式设备上,protobuf 定义仅用于与它们之间的传输,而不用于实际存储。所以我可以在阅读它们时限制数字。
.proto
但是,我宁愿在or文件中定义这些最大值,.options
以确保所有客户端应用程序都知道这些限制。
有没有办法做到这一点?
我知道有字段选项,但此处列出的选项不包括此选项。可以创建自定义选项,但这似乎需要编写编译器扩展,这意味着我必须为我想要编译的每种语言手动实现此限制检查,这比它节省的时间要多。
protocol-buffers - 如何在 .proto 文件中将 com.google.protobuf.Message 定义为消息类型
如何在 proto 文件中定义通用消息。
例如:
而不是上面提到的协议,我需要以下协议。
我需要在. Foo
_ 有没有办法做到这一点?Bar
Baz
response
postgresql - 将 gorm.Model 字段集成到 protobuf 定义中
我试图弄清楚如何将 gorm.Model 字段(deleted_at、create_at、id 等)集成到我的 proto3 定义中。但是,我不能为 proto3 设置日期时间类型。我尝试寻找有关如何将 gorm 字段序列化为字符串的文档(因为 proto3 处理字符串),但我没有找到任何东西。
有没有人能够在他们的原型定义中成功使用 gorm 模型字段?我正在使用 go-micro 的插件来生成 *pb.go 文件。
这是我当前不起作用的消息定义。似乎空字符串存储在数据库中,因为当查询 deleted_at 为 null 时,postgres 数据库什么也不返回。
更新:我已将我的 proto def 更新为以下内容,但 gorm 仍未正确使用 Id、CreatedAt、UpdatedAt 和 DeletedAt 字段
java - 编译 protobuf 以使用原始类而不是众所周知的类型
假设我有 test.proto 文件:
如果我将其编译(使用 protoc v3.5.0)为 c# 代码,我将获得可为空的类型属性:
但如果我将其编译为 Java 代码,字段将是众所周知的类型:
我正在将项目从 proto2 移动到 proto3,因此我想避免使用众所周知的类型,因为更改相关代码需要大量工作。对于 c# 项目,我不需要修改任何内容,但在 Java 中,我需要按照以下示例进行操作:
有没有办法将proto
文件编译为 Java,以便设置器接受原始类/包装器(字符串、整数等)作为参数?
javascript - 如何使用导入加载 proto 文件
我正在使用dcodeIO/protobuf.js库(版本 6.8.4)来解析浏览器中的 protobuf 消息。只要不导入另一个 proto 文件,我就可以使用简单的 proto 文件。
在主文件中导入其他 proto 文件会破坏一切。
这就是我所拥有的:
文件结构
/li>messageA.proto
/li>messageB.proto
/li>使用 6.8.4:
/li>
.
5.0:
.
/li>
c++ - 用于 protobuf 消息比较的 C 宏
我的目标是比较 protobuf 消息中的一些字段。我试过MessageDifferencer,但我不想使用反射。我正在使用 protobuf 3.4.0。
时间变量存储在 protobuf 众所周知的类型中,例如 google.protobuf.Duration 和 google.protobuf.Timestamp。
我想使用一个宏,它需要两个对象和一个字段名:
我期待以下结果:
我已经有一个简单类型的宏:
protocol-buffers - 停止省略协议缓冲区中的默认值
我有一个定义如下的原型模式,
现在根据官方proto3 文档,默认值不会序列化以在有线传输期间节省空间。但在我的情况下,我想接收客户端是否明确设置true/false
了字段email_subscribed/sms_subscribed
(因为这些值是true
以前的,但现在用户想要取消订阅)。因此,当客户端发送false
这些字段中的任何一个时,生成器代码序列化器只会忽略这些字段。
我如何实现这一点并避免在上述情况下省略这些字段?
PS:我使用 Javascript 作为我的 GRPC 客户端和 Python 和 GRPC 服务器。
protocols - 如何定义具有可变有效负载长度的 *.proto 文件?
我尝试编写我的第一个 *.proto 文件。这是我的尝试:
标头具有字段长度。此值定义有效负载中数据字段的长度。这就是我的问题:数据字段是动态的,我现在不知道大小。我可以将标头和有效负载拆分为 2 个单独的 *.proto 文件。但是我仍然不知道如何动态设置其中一个字段的长度。
在此先感谢您的帮助!
java - 发送 protobuf java 文件或 JsonFormat 字符串
首先是一些背景知识:我有一个系统,其中客户端点击 API 以获取一些资源。API 调用微服务来获取所需的数据。API 的工作是最终向客户端发送一个 json 字符串(由从微服务获取的数据构造)
客户端是一个需要 application/json 的遗留系统。但是,我希望 API 和微服务通过 http 使用 application-x-protobuf 进行通信。
我的问题是将我的 proto java 文件转换为微服务本身的字符串然后将其发送到 API 是否有意义?或者这是否违背了使用 proto 的目的?
JsonFormat.printer().print(myprotofile)
为了利用 protobuf 的速度,是否有必要通过网络发送一个 proto java 文件,而不是从 proto java 文件 () 转换的字符串?
protocol-buffers - 由于默认值,Protobuf 忽略 bool 和 ints 值
我正在将 json 文件转换为字符串,然后将字符串转换为 proto3 文件。
这是json文件:
这是我将 json 文件转换为字符串的方法:
这是我将字符串转换为 proto3 文件的方法:
我的 json 中有 boolean 和 int 字段,其中一些字段的值必须是默认值(布尔为 false,int 为 0)。
当我将上述文件反序列化为 proto3 java 文件时,上述两个字段都将被忽略,即使我已明确设置值(如您在上述 json 文件中所见),我的 json 也会变为空。
我知道 proto3 在反序列化/序列化时会忽略默认值,但是有没有办法不忽略显式设置的字段,即使它们是默认值?