Generieren von Proto-Buffs ohne OmitEmpty-JSON-Tags in Go
Bei Verwendung von gRPC mit einem JSON-Proxy werden omitempty-Tags automatisch zu generierten Strukturen hinzugefügt. Dies kann beim Marshallen von Nachrichten zu Problemen führen, da Standardwerte nicht in der JSON-Nutzlast enthalten sind.
Um dies zu umgehen, sollten Sie die folgende Option zu Ihrem ServeMux hinzufügen:
gwmux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName: true, EmitDefaults: true}))
Dies stellt sicher dass im generierten JSON immer Standardwerte vorhanden sind.
Alternativ können Sie die verwenden google.golang.org/protobuf/encoding/protojson-Paket zum Marshallen Ihrer Protokollpuffernachrichten. Dieses Paket bietet mehr Kontrolle über den Codierungsprozess und ermöglicht Ihnen die Angabe, dass Standardwerte ausgegeben werden sollen:
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 }
Hinweis: google.golang.org/protobuf hat den veralteten Github ersetzt .com/golang/protobuf und sein jsonpb-Paket.
Das obige ist der detaillierte Inhalt vonWie kann ich das Auslassen leerer JSON-Tags beim Generieren von Protobuf-Nachrichten in Go verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!