Protoc генерировать путь импорта на исходный файл Go - PullRequest
1 голос
/ 18 июня 2019

У меня есть файл pb в $GOPATH/src/github.com/cs/p/a/a.proto, а другой файл pb в $GOPATH/src/github.com/cs/p/b/b.protoa.proto import b.proto вот так:

import "b/b.proto"

Теперь я ввожу $GOPATH/src/github.com/cs/p и выполняю следующую команду:

protoc --go_out = plugins = grpc:,a / a.proto

Затем я нахожу, что a.pb.go генерируется в $GOPATH/src/github.com/cs/p/a/, внутри которого есть такое утверждение: import "b".

Когда я строю проект, онговорит, что не может найти пакет b.Что я должен делать ?На самом деле я надеюсь a.pb.go import b вот так: import github.com/cs/p/b.Можно ли это сделать?

1 Ответ

0 голосов
/ 18 июня 2019

На самом деле я надеюсь, что импорт a.pb.go b будет таким: import github.com/cs/p/b. Можно ли это сделать?

Да!

Необходимо указать путь импорта на этапе компиляции protoc. Итак, предполагая, что ваш источник git находится по пути $GOPATH/src, вы бы добавили флаг включения "-I.:$GOPATH/src" примерно так:

protoc --go_out=plugins=grpc:. "-I.:$GOPATH/src" a/a.proto

После импорта для ссылки на любые типы сообщений используйте путь к области действия <package name>.<message name>.

Например, определение (git hosted):

// this file resides here: ${GOPATH}/src/github.com/bib/pb/person.proto
package tutorial;

message Person {
  string name = 1;
}

будет импортирован и на него будут ссылаться так:

import "github.com/bib/pb/person.proto"

message AddressBook {
  repeated tutorial.Person people = 1;
}
...