Maison >développement back-end >Golang >Comment « mustEmbedUnimplemented* » de gRPC améliore-t-il la compatibilité ascendante et la gestion des erreurs d'exécution ?
Comprendre « mustEmbedUnimplemented » dans gRPC*
Avec l'introduction récente de « mustEmbedUnimplemented*" dans gRPC-go, la compatibilité ascendante gagne en importance. Ce changement soulève la question : comment cette fonctionnalité améliore-t-elle les fonctionnalités et résout-elle les défis rencontrés précédemment ?
Compatibilité ascendante
Dans les versions antérieures, les serveurs gRPC avec des implémentations de méthodes manquantes se déclenchaient une erreur de compilation. Cette erreur a servi de sécurité, empêchant les implémentations incomplètes. Cependant, les versions plus récentes du compilateur protoc-gen-grpc-go exigent désormais que les serveurs soient rétrocompatibles en implémentant à la place des interfaces « Non implémentées* ».
Avantages de la compatibilité ascendante
La compatibilité ascendante offre plusieurs avantages :
Intégration "Non implémentée"*
Pour intégrer une interface "Non implémentée*", ajoutez simplement une implémentation nulle à la structure de votre serveur, comme ceci :
type server struct { pdfpb.UnimplementedGreetServiceServer }
Cela ne provoquera pas d'erreurs de compilation, mais toute méthode non implémentée entraînera une erreur d'exécution "codes.Unimplemented".
Se désinscrire de compatibilité ascendante
Si vous le souhaitez, vous pouvez désactiver la compatibilité ascendante en intégrant des interfaces « non sécurisées » plutôt. Ces interfaces incluent la méthode "mustEmbedUnimplemented*" sans nécessiter d'implémentations réelles de méthode.
type FooBarService struct { grpc.UnsafeFooBarServiceServer // other fields }
Génération de code sans compatibilité ascendante
Vous pouvez également générer du code sans compatibilité ascendante en passant l'option "require_unimplemented_servers=false" au Plugin protoc-gen-grpc-go :
protoc --go-grpc_out=require_unimplemented_servers=false:.
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!