28

我正在尝试使用 Google protobuf,并且我有以下描述:

message.proto文件:

message Request {
   required int32 id = 1;
   optional string value = 2;
}

service.proto文件:

import "message.proto";

service Service {
    rpc request (Request) returns (bool);
}

我正在尝试生成 c++ 源代码并出现错误:

$ protoc service.proto --cpp_out=/tmp/proto/build

service.proto:4:40:预期的消息类型。

我必须只返回用户定义的类型吗?是否支持原始(likeboolstring)?我可以使用原始类型作为服务方法参数(而不是Request在我的示例中)吗?

4

3 回答 3

40

不,您不能将原始类型用作请求或响应。您必须使用消息类型。

这很重要,因为可以稍后扩展消息类型,以防您决定要添加新参数或返回一些附加数据。

于 2015-03-07T20:57:35.943 回答
8

如果要返回原始类型,请将其包装在 a 中message并返回:

message Name {
  string name = 1;
}

如果您不想返回任何内容,void我的意思是,您可以创建一条空消息:

message Void {} 

message Name {
  string name = 1;
}

..
service MyService{
  rpc MyFunc(Name) returns (Void);
}
于 2018-05-13T02:53:13.217 回答
4

您可以使用wrappers.proto返回标量数据类型,如 bool、int 等

service.proto文件:

import "message.proto";
import "google/protobuf/wrappers.proto";

service Service {
    rpc request (Request) returns (.google.protobuf.BoolValue); 
}
于 2021-02-09T11:55:55.657 回答