Maison > développement back-end > Golang > Comment « mustEmbedUnimplemented* » dans gRPC-go garantit-il la compatibilité ascendante pour les implémentations de serveur ?

Comment « mustEmbedUnimplemented* » dans gRPC-go garantit-il la compatibilité ascendante pour les implémentations de serveur ?

DDD
Libérer: 2024-11-29 12:40:11
original
996 Les gens l'ont consulté

How Does `mustEmbedUnimplemented*` in gRPC-go Ensure Forward Compatibility for Server Implementations?

MustEmbedUnimplemented* Méthodes dans gRPC pour la compatibilité ascendante

grpc-go a récemment introduit la méthode mustEmbedUnimplemented* pour garantir compatibilité ascendante dans les implémentations de serveur. Auparavant, les implémentations de serveur pouvaient enregistrer un service sans implémenter toutes les méthodes définies dans la définition du proto. Cela a conduit à des cas où de nouvelles méthodes ajoutées au proto entraîneraient des erreurs de compilation en raison d'implémentations manquantes sur le serveur.

Avec la méthode mustEmbedUnimplemented* :

  • Compatibilité ascendante : les implémentations de serveur doivent désormais être intégrées Non implémenté*ServiceServer, permettant l'ajout de nouvelles méthodes sans erreurs de compilation. Cependant, toute tentative d'appel d'une méthode non implémentée entraînera une erreur d'exécution avec code.Unimplemented.
  • Désinscription : les développeurs peuvent désactiver la compatibilité ascendante en intégrant Unsafe*ServiceServer à la place. Cela évitera les erreurs d'exécution mais conservera les erreurs de compilation en cas de méthodes non implémentées.

Par exemple :

// Implements gRPC FooBarServiceServer
type FooBarService struct {
    grpc.UnsafeFooBarServiceServer // Opt out of forward compatibility
    // other fields
}
Copier après la connexion

Pour désactiver la compatibilité ascendante dans la génération de code :

protoc --go-grpc_out=require_unimplemented_servers=false:.
Copier après la connexion

La méthode mustEmbedUnimplemented* garantit que les implémentations du serveur sont toujours à jour avec la dernière définition de proto, évitant ainsi les incohérences potentielles. Il fournit un moyen gracieux d'ajouter de nouvelles méthodes sans casser le code existant tout en conservant la 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!

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