在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中文網其他相關文章!