J'ai un projet existant dans Go où j'utilise des tampons de protocole/gRPC. Jusqu'à récemment le go_package
était facultative et le nom du package Go résultant serait le même que le nom du package proto.
Ce fichier se trouve à la racine du projet. Le fichier de code généré (authenticator.pb.go
) habite au même endroit. Fichier Proto:
syntax = "proto3";
package authenticator;
service Authenticator {...}
La commande de génération spécifie que je veux sortir dans le même répertoire:
protoc --go_out=plugins=grpc:. authenticator.proto
Aujourd'hui, j'ai extrait une nouvelle version du compilateur de tampons de protocole et github.com/golang/protobuf/protoc-gen-go
. Lors de la première exécution, un avertissement a été reçu:
WARNING: Missing 'go_package' option in "authenticator.proto",
please specify it with the full Go package path as
a future release of protoc-gen-go will require this be specified.
See https://developers.google.com/protocol-buffers/docs/reference/go-generated#package for more information.
Le lien suggéré est plus ou moins inutile. Mais le tutoriel est un peu plus explicite:
L'option go_package définit le chemin d'importation du package qui contiendra tout le code généré pour ce fichier. Le nom du package Go sera le dernier composant de chemin du chemin d'importation. Par exemple, notre exemple utilisera un nom de package "tutorialpb".
option go_package = "github.com/protocolbuffers/protobuf/examples/go/tutorialpb";
Après avoir ajouté cette option au fichier proto et réexécuté la commande, la sortie se retrouve dans ce chemin, par rapport à la racine du projet. Quelque chose comme:
$GOPATH/src/github.com/<org>/authenticator/github.com/<org>/authenticator/authenticator.pb.go
J'ai essayé les alternatives suivantes comme go_package
des noms:
.
authenticator
La génération s'est produite au bon endroit, mais j'ai reçu l'avertissement:
WARNING: Deprecated use of 'go_package' option without a full import path...
Alors, quelle est la bonne manière sans casser la mise en page du projet?
Il vous suffit d'ajouter une option Go qui vous dira d'ajouter un fichier par rapport au fichier proto.
protoc --go_out=. --go_opt=paths=source_relative your_file.proto
Cela rendra votre_fichier.pb.go dans le même répertoire que votre_fichier.proto