webentwicklung-frage-antwort-db.com.de

Richtiges Format von protoc go_package?

Ich habe ein vorhandenes Projekt in Go, in dem ich Protokollpuffer/gRPC verwende. Bis vor kurzem die go_package Option war optional und der resultierende Go-Paketname würde mit dem Proto-Paketnamen übereinstimmen.

Diese Datei befindet sich im Projektstamm. Die generierte Codedatei (authenticator.pb.go) lebt am selben Ort. Protodatei:

syntax = "proto3";

package authenticator;

service Authenticator {...}

Der Generierungsbefehl gibt an, dass ich im selben Verzeichnis ausgeben möchte:

protoc --go_out=plugins=grpc:. authenticator.proto

Heute habe ich eine neue Version des Protokollpuffer-Compilers und github.com/golang/protobuf/protoc-gen-go. Beim ersten Lauf wurde eine Warnung angezeigt:

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.

Der vorgeschlagene Link ist mehr oder weniger nutzlos. Das Tutorial ist jedoch etwas expliziter:

Die Option go_package definiert den Importpfad des Pakets, der den gesamten generierten Code für diese Datei enthält. Der Go-Paketname ist die letzte Pfadkomponente des Importpfads. In unserem Beispiel wird beispielsweise der Paketname "tutorialpb" verwendet.

option go_package = "github.com/protocolbuffers/protobuf/examples/go/tutorialpb";

Nachdem Sie diese Option zur Protodatei hinzugefügt und den Befehl erneut ausgeführt haben, endet die Ausgabe in diesem Pfad relativ zum Projektstamm. Etwas wie:

$GOPATH/src/github.com/<org>/authenticator/github.com/<org>/authenticator/authenticator.pb.go

Ich habe die folgenden Alternativen als go_package Namen:

  • .
  • authenticator

Die Erzeugung erfolgte am richtigen Ort, aber ich erhielt die Warnung zurück:

WARNING: Deprecated use of 'go_package' option without a full import path...

Was ist also der richtige Weg, ohne das Projektlayout zu beschädigen?

2
Tim

Sie müssen nur eine Go-Option hinzufügen, die angibt, dass eine Datei relativ zur Protodatei hinzugefügt werden soll.

protoc --go_out=. --go_opt=paths=source_relative your_file.proto 

Dadurch befindet sich die Datei your_file.pb.go im selben Verzeichnis wie your_file.proto

0
Vaibhav Grover