判断一个字段在不在请求中
有两种方法判断一个字符在不在请求中,直接判断和通过reflection动态地判断
syntax = "proto3";
message MyMessage {
int my_int_field = 1;
}
- 直接判断
MyMessage message;
message.set_my_int_field(123);
if (message.has_my_int_field()) {
int value = message.my_int_field();
}
- 反射
FindFieldByName
找到则返回消息中该字段的描述,找不到则返回null
int main() {
MyMessage message;
message.set_my_int_field(123);
const google::protobuf::Reflection* reflection = message.GetReflection();
const google::protobuf::FieldDescriptor* field = message.GetDescriptor()->FindFieldByName("my_int_field");
if (field && reflection->HasField(message, field)) {
int value = reflection->GetInt32(messsage, field);
}
}