3 回答
TA贡献2037条经验 获得超6个赞
如果您使用的是 grpc-gateway 并且您需要在 json 编组期间提供默认值,您可以考虑在创建您的 servemux 时添加以下选项
gwmux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName: true, EmitDefaults: true}))
在 grpc-gateway 之外,如果要编组 protocul 缓冲区消息,请使用github.com/golang/protobuf/jsonpbpackage 而不是encoding/json
func sendProtoMessage(resp proto.Message, w http.ResponseWriter) {
w.Header().Set("Content-Type", "application/json; charset=utf-8")
m := jsonpb.Marshaler{EmitDefaults: true}
m.Marshal(w, resp) // You should check for errors here
}
TA贡献1802条经验 获得超10个赞
便携式解决方案:
用于sed
生成 via 后剥离标签protoc
。
在生成 *.pb.go 文件后,我在 go:generate 脚本中实际使用的示例:
ls *.pb.go | xargs -n1 -IX bash -c 'sed s/,omitempty// X > X.tmp && mv X{.tmp,}'
注意:sed -i
此处不使用 (inline-replacement),因为该标志在标准 OS-X 和 Linux 之间不可移植。
TA贡献1793条经验 获得超6个赞
您可以尝试使用 gogo proto ( https://github.com/gogo/protobuf ) 使用 jsontag 扩展名,您的 proto 消息看起来像
message Status {
int32 code = 1 [(gogoproto.jsontag) = "code"];
string message = 2 [(gogoproto.jsontag) = "message"];
}
如果愿意,您还可以添加更多标签。
- 3 回答
- 0 关注
- 275 浏览
添加回答
举报