Maison > développement back-end > Golang > Comment puis-je empêcher les balises JSON OmitEmpty lors de la génération de messages Protobuf dans Go ?

Comment puis-je empêcher les balises JSON OmitEmpty lors de la génération de messages Protobuf dans Go ?

Mary-Kate Olsen
Libérer: 2024-12-03 22:55:12
original
848 Les gens l'ont consulté

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

Génération de proto buffs sans balises JSON OmitEmpty dans Go

Lors de l'utilisation de gRPC avec un proxy JSON, les balises omitempty sont automatiquement ajoutées aux structures générées. Cela peut entraîner des problèmes lors du marshaling des messages, car les valeurs par défaut ne sont pas incluses dans la charge utile JSON.

Pour surmonter ce problème, pensez à ajouter l'option suivante à votre ServeMux :

gwmux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName: true, EmitDefaults: true}))
Copier après la connexion

Cela garantira que les valeurs par défaut sont toujours présentes dans le JSON généré.

Alternativement, vous pouvez utiliser le Package google.golang.org/protobuf/encoding/protojson pour rassembler les messages de votre tampon de protocole. Ce package offre plus de contrôle sur le processus d'encodage et vous permet de spécifier que les valeurs par défaut doivent être émises :

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
}
Copier après la connexion

Remarque : google.golang.org/protobuf a remplacé le github obsolète .com/golang/protobuf et son package jsonpb.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal