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 ?

Comment « mustEmbedUnimplemented* » de gRPC améliore-t-il la compatibilité ascendante et la gestion des erreurs d'exécution ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-05 14:56:11903parcourir

How Does gRPC's

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 :

  1. Gestion des erreurs d'exécution : Au lieu d'arrêter la compilation, les implémentations incomplètes entraîneront désormais une erreur d'exécution lorsqu'elles seront invoquées. Cela garantit que les méthodes sont implémentées avant qu'elles ne soient appelées, évitant ainsi des plantages potentiels.
  2. Mise en œuvre progressive : La compatibilité ascendante permet une mise en œuvre progressive de nouvelles méthodes. Les implémentations qui ne sont pas encore prêtes peuvent être intégrées sans déclencher d'erreurs, permettant aux développeurs de prioriser les plus critiques.

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!

Déclaration:
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