Maison > développement back-end > Golang > Comment supprimer les balises « omitempty » de la sortie GoLang Protobuf JSON ?

Comment supprimer les balises « omitempty » de la sortie GoLang Protobuf JSON ?

DDD
Libérer: 2024-12-30 05:55:09
original
356 Les gens l'ont consulté

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

Suppression de la balise Omitempty des balises JSON générées dans GoLang Protobuf

Dans Google gRPC avec un proxy JSON, vous pouvez rencontrer un scénario dans lequel vous avez besoin pour supprimer les balises omitempty des structures générées dans les fichiers .pb.go. Cette exigence est nécessaire pour garantir la présence de valeurs par défaut lors du marshaling JSON.

Pour résoudre ce problème, vous pouvez mettre en œuvre les stratégies suivantes :

Pour les utilisateurs de grpc-gateway :

Ajoutez l'option suivante lors de la création de votre serveurmux :

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

En dehors de grpc-gateway :

Utilisez le package google.golang.org/protobuf/encoding/protojson pour rassembler votre message Protobuf. Ce package a remplacé le package obsolète github.com/golang/protobuf/jsonpb.

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

En suivant ces approches, vous pouvez supprimer efficacement la balise omitempty des balises JSON générées dans GoLang Protobuf, garantissant ainsi l'inclusion des valeurs par défaut lors du marshaling JSON.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal