protoc - Cli 生成协议缓冲区
问题描述
在我的 test.proto 文件中,我有如下内容,即消息 HTML 中没有字段,如何为消息页面的 _html 字段设置值?
message HTML{
enum Type {
NO_TYPE = 0;
HTML5 = 1;
XHTML = 2;
}
}
message Page{
optional HTML _html = 1;
}
如何设置值?
echo _html : **???** | protoc --encode=Page test.proto > binary.data
https://medium.com/@at_ishikawa/cli-to-generate-protocol-buffers-c2cfdf633dce
解决方案
如何设置值?
你不能像你展示的那样定义它。该消息HTML
仅包含枚举的定义,但没有实际字段。您可以在消息中添加一个字段HTML
,或者将类型定义为Page
asHTML.Type
而不仅仅是HTML
:
测试原型:
message HTML{
enum Type {
NO_TYPE = 0;
HTML5 = 1;
XHTML = 2;
}
}
message Page{
optional HTML.Type _html = 1;
}
然后创建一个文件 test.txt:
_html: HTML5
你可以像这样创建一个二进制文件:
protoc --experimental_allow_proto3_optional --encode Page test.proto < test.txt > binary.data
并解码:
protoc --experimental_allow_proto3_optional --decode Page test.proto < binary.data
最后一条命令打印:
_html: HTML5
除了枚举定义之外,HTML
消息是一条Empty
消息,它甚至作为预定义的消息存在:
// 可以重复使用的通用空消息,以避免
在 API 中定义重复的 // 空消息。一个典型的例子是将其用作请求
// 或 API 方法的响应类型。
// JSON 表示Empty
是空的 JSON 对象{}
。
消息空{}
推荐阅读
- security - 在 Ubuntu 19.10 上更新为 OpenSSH 8.1 但在从 SecurityMetrics 扫描时显示旧版本
- dart - 飞镖子进程无权访问终端
- c# - SignInManager.PasswordSignInAsync keep return me null object refrence
- java - 静态 int 数据值打印为十六进制而不是 int [Java]
- ios - iOS WKWebview loadHTMLString(_ baseURL:) 加载图片和读取css失败
- javascript - 提交表单后PHP保持选中单选框
- php - php模态ajax延迟响应
- flutter - Flutter 使用图像作为框架来覆盖图片
- python - 在 Google App Engine 上部署应用程序 - requirements.txt 中的错误
- regex - 正则表达式从正则表达式模式中提取lookbehind和lookahead