我在使用 Protoc 和包含可空字符串字段的现有结构时遇到了一些问题。
我试图序列化以进行传输的结构包含一堆在 json 中可以为空的字段(因此我们可以区分null,""和一个设定值)。
type Message struct {
Path *string `json:"path"`
}
因此,如果用户发送一个空的 json 字符串{},则 Path 将是nil而不是"",而{"path":""}它也是有效的,并且与{"path": null}.
我提出的proto3声明显然看起来像这样(并且是可选的,required并且optional从 proto3 中删除:
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 是否有扩展来执行此操作的任何建议?或者如何描述这个原型声明?