Introduction
Les tampons de protocole (Protobuf) sont un langage -Mécanisme extensible neutre et indépendant de la plate-forme pour la sérialisation des données structurées. Lorsque vous travaillez avec Protobuf, il peut être nécessaire de supprimer la balise omitempty des balises JSON générées dans les fichiers *.pb.go. Cet article explique comment y parvenir en utilisant différentes méthodes.
Option grpc-gateway
Si vous utilisez grpc-gateway, l'inclusion de l'option suivante lors de la création de ServeMux garantira que les valeurs par défaut sont présentes lors du marshaling JSON :
gwmux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName: true, EmitDefaults: true}))
protobuf Package
En dehors de grpc-gateway, le package google.golang.org/protobuf/encoding/protojson (remplaçant désormais le obsolète github.com/golang/protobuf/jsonpb) peut être utilisé pour marshaler le protocole Messages tampons. En utilisant la structure Marshaler avec EmitDefaults: true défini, les valeurs par défaut seront incluses dans la sortie JSON :
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) // Error handling omitted }
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!