Maison >développement back-end >Golang >Pourquoi l'importation de fichiers Proto à partir de différents packages entraîne-t-elle une erreur « Protoreflect de méthode manquante » dans Go ?

Pourquoi l'importation de fichiers Proto à partir de différents packages entraîne-t-elle une erreur « Protoreflect de méthode manquante » dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-27 02:04:03501parcourir

Why Does Importing Proto Files from Different Packages Lead to a

L'importation de fichiers proto à partir de différents packages provoque une « méthode manquante protoreflect »

Problème

J'ai récemment créé un package dans mon projet Go pour gérer tous les mes fichiers .proto. J'ai déplacé tous mes fichiers .proto vers le nouveau package et les ai importés dans un autre package où je voulais les utiliser. Cependant, lorsque j'ai essayé d'utiliser proto.Unmarshal dans l'autre package, j'ai reçu l'erreur suivante :

var sensorData *prototemps.Sensor
cannot use sensorData (variable of type *prototemps.Sensor) as protoreflect.ProtoMessage value in argument to proto.Unmarshal: missing method ProtoReflect

Solution

Le message d'erreur indique que le type *prototemps.Sensor ne fonctionne pas implémentez la méthode ProtoReflect. Cette méthode est requise par proto.Unmarshal pour désorganiser les données binaires dans le message cible.

Pour résoudre ce problème, j'ai dû importer le package correct contenant la méthode ProtoReflect pour le type *prototemps.Sensor. Il existe deux options pour cela :

  1. Importez le package "github.com/golang/protobuf/proto".
  2. Importez le package "google.golang.org/protobuf/proto". ".

Une fois que j'ai mis à jour l'instruction d'importation, l'erreur a été résolue et j'ai pu utiliser avec succès proto.Unmarshal pour analyser les données binaires.

Fichier .go mis à jour (Reader Forfait)

<code class="go">package reader

import (
    "github.com/golang/protobuf/proto" // Import the correct package containing ProtoReflect

    prototemps "github.com/your-org/your-repo/prototemps" // Import the prototemps package containing the Sensor
)

func main() {
    sensorData := &prototemps.Sensor{}
    err := proto.Unmarshal(msg.Payload(), sensorData) 
    if err != nil {
        // Handle error
    }
}</code>

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