Heim > Backend-Entwicklung > Golang > Wie entferne ich „omitempty'-Tags aus der JSON-Ausgabe von GoLang Protobuf?

Wie entferne ich „omitempty'-Tags aus der JSON-Ausgabe von GoLang Protobuf?

DDD
Freigeben: 2024-12-30 05:55:09
Original
356 Leute haben es durchsucht

How to Remove `omitempty` Tags from GoLang Protobuf JSON Output?

Omitempty-Tag aus generierten JSON-Tags in GoLang Protobuf entfernen

In Google gRPC mit einem JSON-Proxy stoßen Sie möglicherweise auf ein Szenario, in dem Sie dies benötigen um die Omitempty-Tags aus den generierten Strukturen in .pb.go-Dateien zu entfernen. Diese Anforderung entsteht, um das Vorhandensein von Standardwerten während des JSON-Marshallings sicherzustellen.

Um dieses Problem zu beheben, können Sie die folgenden Strategien implementieren:

Für grpc-gateway-Benutzer:

Fügen Sie beim Erstellen Ihres Servemux die folgende Option hinzu:

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

Außerhalb von grpc-gateway:

Verwenden Sie das Paket google.golang.org/protobuf/encoding/protojson zum Marshallen Ihrer Protobuf-Nachricht. Dieses Paket hat das veraltete Paket github.com/golang/protobuf/jsonpb ersetzt.

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) // Handling of potential errors is recommended
}
Nach dem Login kopieren

Durch Befolgen dieser Ansätze können Sie das omitempty-Tag effektiv aus den generierten JSON-Tags in GoLang Protobuf entfernen und so die Einbeziehung sicherstellen der Standardwerte beim JSON-Marshalling.

Das obige ist der detaillierte Inhalt vonWie entferne ich „omitempty'-Tags aus der JSON-Ausgabe von GoLang Protobuf?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage