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; }
4 Réponses :
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.
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.
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".
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
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