首頁 >後端開發 >Golang >在 Go 中產生 Protobuf 訊息時如何防止 OmitEmpty JSON 標籤?

在 Go 中產生 Protobuf 訊息時如何防止 OmitEmpty JSON 標籤?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-03 22:55:12915瀏覽

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

在Go 中產生沒有OmitEmpty JSON 標籤的Proto Buff

當使用帶有JSON 代理的gRPC 時,添加omi到生成的結構中。這可能會在編組訊息時導致問題,因為預設值不包含在 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