事情经过
我的一个proto 文件里oneof里面的一个字段在这次更新中打算去掉。为了保持更好的兼容性,我才用了网上建议的方案:给这个删除的字段加上reserved 字段。但是加上之后在用protoc编译的时候,发现编译总是报错:Expected field name
我的proto文件如下,我想去掉的是number=2 的字段。
message TheNode {
oneof N1 {
string name = 1;
string alias = 2;
string title = 3;
}
}
为它加上reserved字段以后:(这样子写是会报错的,报Expected field name)
message TheNode {
oneof N1 {
string name = 1;
reserved 2;
string title = 3;
}
}
解决方法
查了官网,也搜索了很多网页,没有线索。后来看了别人的写法,找到了正确加reserved字段的方式:reserved的那个字段要放在message下面,而不是放在oneof里面。
正确的加reserved的proto:
message TheNode {
reserved 2;
oneof N1 {
string name = 1;
string title = 3;
}
}