gpt4 book ai didi

go - 无法使用 protobuf 生成空数组/golang 代码片段

转载 作者:行者123 更新时间:2023-12-01 18:15:59 25 4
gpt4 key购买 nike

我们希望将一个具有一个属性的对象/结构作为 golang 中的空列表/数组/slice 返回给客户端(浏览器)。从 go 代码中,我们返回 len=0 和capacity=0 的空 slice ,但是通过 protobuf 这个键被删除或设置为 nil 并被删除。

protobuf code

syntax = "proto3";
package version1;
message ToDo {
int64 id = 1 ;
string title = 2;
}
message ReadAllResponse{
repeated ToDo toDos = 1 ;
}

golang code:

list := make([]*version1.ToDo, 0) //[]*version1.ToDo{}
output:= version1.ReadAllResponse{
ToDos: list,
Api: "v1",
}

我得到的实际输出为 {api: "v1"} 但预期应该为 {api: "v1",todos:[]}

请帮助/建议我们修复 protobuf 或 golang 语法。

最佳答案

grpc-gateway时,您的数组字段会丢失使用 jsonpb 序列化器将 proto 结构序列化为 json。

幸运的是,网关公开了一种在设置网关时配置 jsonpb 序列化器的方法:

mux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{ EmitDefaults:true}))

&runtime.JSONPb{ EmitDefaults:true} 选项应该执行您想要的操作。

关于go - 无法使用 protobuf 生成空数组/golang 代码片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57930435/

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