Maison >développement back-end >Golang >Qu'est-ce que la méthode « mustEmbedUnimplemented » de gRPC et comment garantit-elle la compatibilité ascendante ?

Qu'est-ce que la méthode « mustEmbedUnimplemented » de gRPC et comment garantit-elle la compatibilité ascendante ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-30 17:59:09955parcourir

What is gRPC's `mustEmbedUnimplemented` Method and How Does it Ensure Forward Compatibility?

Comprendre la méthode mustEmbedUnimplemented de gRPC*

Dans sa mise à jour la plus récente, gRPC-go a introduit la méthode mustEmbedUnimplemented* méthode pour assurer la compatibilité ascendante de ses serveurs. Mais que fait-il exactement ?

Avant mustEmbedUnimplemented*

Auparavant, l'enregistrement d'une implémentation de serveur impliquait de l'enregistrer directement, comme indiqué :

        pb.RegisterFooBarServiceServer(
            server,
            &FooBarServer{}, // or whatever you use to construct the server impl
        )

Si le serveur manquait de certaines implémentations de méthodes, cela entraînerait des erreurs lors compilation.

Présentation de mustEmbedUnimplemented*

Avec le compilateur protoc-gen-grpc-go mis à jour, la compatibilité ascendante devient la valeur par défaut. Cela signifie :

  1. Mandating mustEmbedUnimplementedFooBarServiceServer : L'inclusion de cette instruction dans les implémentations du serveur évite les erreurs de compilation lorsque les nouvelles méthodes ne sont pas explicitement implémentées. Cependant, si des méthodes non implémentées sont appelées, cela déclenche une erreur d'exécution (code.Unimplemented).
  2. Désactivation avec Unsafe FooBarServiceServer : Les développeurs peuvent désactiver la compatibilité ascendante en intégrant UnsafeFooBarServiceServer à la place. . Cette interface intègre la méthode mustEmbedUnimplementedFooBarServiceServer(), éliminant l'erreur de compilation tout en permettant l'implémentation explicite de nouveaux gestionnaires.

Configuration de la compatibilité ascendante

De plus, la compatibilité ascendante peut être désactivée en définissant l'option suivante lors de l'utilisation protoc-gen-grpc-go :

protoc --go-grpc_out=require_unimplemented_servers=false:.

Avantages

mustEmbedUnimplemented* garantit que les serveurs sont toujours compatibles avec les versions ultérieures, évitant ainsi les erreurs inattendues causées par des méthodes non mises en œuvre. En se désinscrivant avec Unsafe FooBarServiceServer, les développeurs peuvent maintenir la compatibilité ascendante tout en adhérant aux principes de compatibilité ascendante.

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