我在使用 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 是否有扩展来执行此操作的任何建议?或者如何描述这个原型声明?