我在 Protoc 和包含可为空字符串字段的现有结构中遇到了一些问题。
我尝试序列化以进行传输的结构包含一堆在 json 中可为空的字段(因此我们可以区分null,""和设置值)。
type Message struct {
Path *string `json:"path"`
}
因此,如果用户发送空 json 字符串,{}则 Path 将为nil且不是"",而{"path":""}也是有效的且与 不同{"path": null}。
proto3我提出的声明显然看起来像这样(并且是可选的,并且required从optionalproto3 中删除了:
syntax = "proto3";
message Message {
string Path = 1;
}
运行 Protoc 后,我最终得到一个如下所示的结构,所有值都是,string并且无法将它们声明为*string:
type Message struct {
Path string `protobuf:"bytes,1,opt,name=Path,proto3" json:"Path,omitempty"`
}
显然我无法从现有的结构中分配给这个数组。但即使我要使用适当的空指针检查等来编写繁琐的映射代码,我target.Path = *source.Path也会失去源结构的三重含义(nil、、)。"""value"
关于如何继续这里的任何建议,或者 Go Protobuf 是否有扩展来执行此操作?或者如何描述这个原始声明?
慕虎7371278
梦里花落0921
Smart猫小萌
相关分类