背景

在构建brpc 客户端和服务端之前,需要先定义好request和response类型, 通常这里会用到protobuf。熟练使用protobuf, 可以方便我们快速开发RPC 服务。下面记录了一些protobuf 容易出错的地方。

添加 repeated 简单常量类型

如果repeated的是1个数据结构,处理,示例如下:

UserDocChangesResp changes;
DocChangeInfo change;
DocChangeInfo* pChange = changes.add_docchangeinfos();
pChange->set_member1();
....
pChange->set_memberN();

如果repeated 是一个常量呢,如果按照上面的思路照葫芦画瓢,会发现没有办法处理了,比如:
““
message AgeRequest (
repeated int32_t ages = 1;
)

如果按照下面的方法处理,编译器会报错:

AgeRequest request;
int32_t * new_age = request->add_ages();
*new_age = 5;

正确的方法是直接添加,如下:

AgeRequest request;
request->add_ages(5);

“`