Protoc Cli生成协议缓冲区

Protoc Cli生成协议缓冲区,protoc,google-protocol-buffer,Protoc,Google Protocol Buffer,在我的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文件中,我有如下内容,即消息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

如何设置这些值

echo _html : **???** | protoc --encode=Page test.proto  > binary.data
当它的定义如您所示时,您不能这样做。消息
HTML
仅包含枚举的定义,而不包含实际字段。您可以在消息
HTML
中添加一个字段,或者将
页面中的类型定义为
HTML.type
,而不仅仅是
HTML

test.proto:

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
除了枚举定义外,
HTML
消息是一个,它甚至以以下形式存在:

//可重复使用以避免定义重复的通用空消息
//API中的空消息。典型的例子是将其用作请求
//或API方法的响应类型。
//
Empty
的JSON表示是空的JSON对象
{}

消息为空{}


这只是一个解释问题的例子,我无法对现有的原型文件进行任何编辑,这就是问题所在,没有编辑原型文件是否有任何解决方法?不,它显示了您通常如何解决问题。另一个更好的选择是在HTML消息中添加一个字段。无论出于何种原因,.proto文件是不可更改的前提条件,以前没有提到过。在本例中,
HTML\u HTML
是一个嵌套消息,没有字段,只有枚举的定义。我的示例演示了如何使用此枚举。现在假设您在HTML消息中定义了两个枚举。。。也许我已经完全离开这里了,但这没有多大意义,如果不更改原始文件,就无法解决。你还没有回复我最后的评论和答案的更新。你明白吗,这是行不通的?请考虑点击投票,并通过点击左边的复选标记来接受答案。
_html: HTML5