【发布时间】:2023-03-08 14:44:01
【问题描述】:
我在使用 Protoc 和包含可空字符串字段的现有结构时遇到了一点问题。
我尝试序列化以进行传输的结构包含一堆在 json 中可为空的字段(因此我们可以区分 null、"" 和一个设置值)。
type Message struct {
Path *string `json:"path"`
}
因此,如果用户发送一个空的 json 字符串 {},则路径将是 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 的扩展来执行此操作的任何建议?或者如何描述这个 proto 声明?
【问题讨论】:
标签: go serialization protocol-buffers protobuf-go