Heim > Backend-Entwicklung > Golang > Wie kann ich das Auslassen leerer JSON-Tags beim Generieren von Protobuf-Nachrichten in Go verhindern?

Wie kann ich das Auslassen leerer JSON-Tags beim Generieren von Protobuf-Nachrichten in Go verhindern?

Mary-Kate Olsen
Freigeben: 2024-12-03 22:55:12
Original
848 Leute haben es durchsucht

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

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}))
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage