关于Proto3中无法显式传递Null值及字段状态识别的技术问询
Proto3中处理字段Null值与显式设置状态的困境
为何实现起来如此困难?
syntax = "proto3"; message Foo { optional float field1 = 1; optional int32 field2 = 2; }
在服务器端,我仅需知晓客户端是否指定了null值:若字段被显式设为null,则希望Web服务执行对应操作(将数据库中相应字段设为null);若客户端未显式指定null,则不执行任何操作。客户端并非总是拥有数据库的全部字段,因此通常仅修改用户关注的字段,而非更新整条记录,这其中常包含将字段显式设为null的需求。
上述代码可用于设置默认值,我能在服务器端通过HasField1查询该字段是否在客户端被设置,但由于基础类型为int/float,无法在客户端将field1显式设为null。
syntax = "proto3"; message Foo { optional google.protobuf.FloatValue field1 = 1; optional google.protobuf.Int32Value field2 = 2; }
该方案允许将字段值设为null,但却移除了所有用于标识字段已被设置的生成代码!
为何不能在使用optional关键字的同时,拥有类似int?的类型?为何无法向服务器明确告知某个字段已被设为null,同时忽略客户端未设置的字段?
内容的提问来源于stack exchange,提问作者user365462
相关产品推荐
相关产品推荐

