2
votes

Horodatage Protobuf introuvable

Relativement nouveau dans GRPC et obtenant une erreur dans mon fichier proto que je n'arrive pas à comprendre. Je souhaite envoyer une heure dans un message en utilisant le "google.protobuf.Timestamp". Je n'arrive pas à l'importer. Qu'est-ce que je fais mal?

libprotoc 3.0.0

Dans mon IDE et mon compilateur (en utilisant la commande ci-dessous), j'obtiens l'erreur

protoc -I profile/ profile/profile.proto --go_out=plugins=grpc:profile

Commande à exécuter:

google/protobuf/timestamp.proto: File not found.
profile.proto: Import "google/protobuf/timestamp.proto" was not found or had errors.
profile.proto:21:5: "google.protobuf.Timestamp" is not defined.

Protocole --version

    syntax = "proto3";

    import "google/protobuf/timestamp.proto";

    service ProfileService {
        rpc ConstructProfileStructFromUser (ConstructProfileStructFromUserRequest) returns (ConstructProfileStructFromUserResponse);
    }

    message ConstructProfileStructFromUserRequest {
        string transactionID    = 1;
        string User         = 2;
    }

    message ConstructProfileStructFromUserResponse {
        string UID = 1;
        string ContactEmail = 2;
        google.protobuf.Timestamp DateOfBirth = 3;
    }


0 commentaires

4 Réponses :


-2
votes

Mon problème était assez simple ...

Je n'avais pas le timestamp.proto téléchargé localement et par conséquent je ne pouvais pas le trouver.

J'ai cloné:

protoc -I profile/ -I MY_CLONED_REPO_LOCATION/protobuf/src profile/profile.proto --go_out=plugins=grpc:profile

Et puis quand je lance mon compilateur, je dois lui donner l'emplacement pour localiser les fichiers timestamp.proto. p >

Pour moi, c'était ...

https://github.com/protocolbuffers/protobuf/tree/master/src/google/protobuf

Une fois qu'il savait où il avait le chemin vers la source, il pouvait le trouver sans problème.


0 commentaires

2
votes

J'ai eu ce problème - j'avais installé le compilateur de protocole thr en utilisant le gestionnaire de paquets apt (ubuntu) et il a placé le compilateur de protocole quelque part comme / usr / local / bin il semble que par défaut, protoc attend et les importations requises pour être présentes dans un chemin d'inclusion relatif à ce .eg / usr / local / bin / include / * à côté de / usr / local / bin / protoc .

Pour corriger, j'ai supprimé la version installée avec apt et téléchargé la dernière version de la page github - github. com / protocolbuffers / protobuf / releases recherchez le téléchargement du protocole pour votre os / arch (par exemple protoc-3.13.0-linux-x86_64.zip ) ce téléchargement a l'inclusion requise (dans le dossier inlcude ). Placez simplement le dossier d'inclusion à côté du binaire dans votre PATH.


3 commentaires

Qu'avez-vous fait exactement @SwiftD après l'avoir téléchargé


@dapo vous devez d'abord désinstaller tout protocole existant, puis une fois téléchargé, vous voulez que le binaire du téléchargement se trouve quelque part dans votre chemin, par exemple / usr / local / bin / protoc (en supposant / usr / local / bin est dans votre variable PATH), il vous suffit de placer le dossier includes du téléchargement dans le même dossier à côté, par exemple / usr / local / bin / includes . devrait fonctionner maintenant depuis n'importe quel endroit, appelez l'indicateur de version pour confirmer


J'ai installé le compilateur de protocoles dans / usr / local / bin, mais je n'ai pas copié les importations requises. Ce problème a été résolu après avoir copié les importations supplémentaires dans "/ usr / local / bin / include".



0
votes

J'ai eu le même problème avec protoc 3.0.0 installé à partir du repo ubuntu. J'ai trouvé une autre solution, sans réinstaller protobuf comme @SwiftD l'a suggéré, en utilisant l'option --proto_path protoc. Dans votre importation .proto devrait ressembler (c'est-à-dire sans chemin):

protoc kcproto.proto --go_out=./  --proto_path=/home/my_home_dir_name/go/src/github.com/golang/protobuf/ptypes/timestamp --proto_path=./

Ensuite, dans l'invocation du protocole, vous passez le chemin absolu vers votre répertoire de package contenant timestamp.proto (j'utilise github.com/golang / protobuf / ptypes / timestamp) en utilisant l'option --proto_path.

syntax = "proto3";

import "timestamp.proto"

remplacez / home / my_home_dir_name / par votre répertoire de paquets go


0 commentaires

0
votes

Pour mac, je lance ceci dans le terminal

PROTOC_ZIP=protoc-3.14.0-osx-x86_64.zip
curl -OL https://github.com/protocolbuffers/protobuf/releases/download/v3.14.0/$PROTOC_ZIP
sudo unzip -o $PROTOC_ZIP -d /usr/local bin/protoc
sudo unzip -o $PROTOC_ZIP -d /usr/local 'include/*'
rm -f $PROTOC_ZIP

Notez que vous pouvez changer la version protoc-3.14.0 en fonction de vos besoins, par exemple protoc-3.xx

Documents: http://google.github.io/proto-lens/installing-protoc.html


0 commentaires