gpt4 book ai didi

Go Struct 中的 Go Protobuf 声明和可选字段(字符串指针)

转载 作者:IT王子 更新时间:2023-10-29 02:06:37 30 4
gpt4 key购买 nike

我在使用 Protoc 和包含可为空字符串字段的现有结构时遇到了一些问题。

我试图序列化以进行传输的结构包含一堆在 json 中可以为 null 的字段(因此我们可以区分 null"" 和一个设置值).

type Message struct {
Path *string `json:"path"`
}

因此,如果用户发送一个空的 json 字符串 {},路径将为 nil 而不是 "",而 { "path":""} 也是有效的,并且与 {"path": null} 不同。

我想出的 proto3 声明显然看起来像这样(并且是可选的,因为 requiredoptional 从 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 , "", "值")。

关于如何在此处进行的任何建议,或者是否有 Go Protobuf 的扩展来执行此操作?或者如何描述这个原型(prototype)声明?

最佳答案

Proto3 返回 Zero Value即使未设置字段。目前无法区分字段是否已设置。

参见 Github 问题 #15 .

可能的解决方案:

关于Go Struct 中的 Go Protobuf 声明和可选字段(字符串指针),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57039033/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com