首页 >后端开发 >Golang >在 Go 中生成 Protobuf 消息时如何防止 OmitEmpty JSON 标签?

在 Go 中生成 Protobuf 消息时如何防止 OmitEmpty JSON 标签?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-03 22:55:12849浏览

How Can I Prevent OmitEmpty JSON Tags When Generating Protobuf Messages in Go?

在 Go 中生成没有 OmitEmpty JSON 标签的 Proto Buff

当使用带有 JSON 代理的 gRPC 时,omitempty 标签会自动添加到生成的结构中。这可能会在编组消息时导致问题,因为默认值不包含在 JSON 负载中。

要解决此问题,请考虑将以下选项添加到您的 ServeMux:

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

这将确保默认值始终存在于生成的 JSON 中。

或者,您可以使用google.golang.org/protobuf/encoding/protojson 包来编组您的协议缓冲区消息。该包提供了对编码过程的更多控制,并允许您指定应发出的默认值:

func sendProtoMessage(resp proto.Message, w http.ResponseWriter) {
    w.Header().Set("Content-Type", "application/json; charset=utf-8")
    m := protojson.Marshaler{EmitDefaults: true}
    m.Marshal(w, resp) // Check for errors here
}

注意: google.golang.org/protobuf 已替换已弃用的 github .com/golang/protobuf 及其 jsonpb 包。

以上是在 Go 中生成 Protobuf 消息时如何防止 OmitEmpty JSON 标签?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn