首页 > 解决方案 > 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

标签: protocprotocol-buffers

解决方案


如何设置值?

你不能像你展示的那样定义它。该消息HTML仅包含枚举的定义,但没有实际字段。您可以在消息中添加一个字段HTML,或者将类型定义为PageasHTML.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 对象{}
消息空{}


推荐阅读