В настоящее время я разрабатываю службу gRPC на Go со шлюзом gRPC в качестве HTTP-прокси. Я генерирую .pb.go
привязки из своих .proto
файлов, но я заметил, что есть тонкие изменения в моих привязках в двух отдельных, но связанных ситуациях, когда я не ожидал этого. В каждом файле привязки есть загадочное поле var fileDescriptorX = byte[]{.....}
, где X
на самом деле число. Оба неожиданных изменения происходят с этим полем и только с этим полем.
Мой большой вопрос: совместимы ли эти привязки друг с другом или изменения в этом поле считаются критическими изменениями, в результате чего разные версии привязок становятся несовместимыми?
Во-первых, если я добавлю еще один прото-файл в ту же папку, и он появится в алфавитном порядке перед существующими прото-файлами, поле fileDescriptor будет переименовано, когда я повторно сгенерирую свои привязки Go. Число X
в конце имени поля fileDescriptorX
соответствует его порядку по сравнению с другими файлами в папке. Чтобы было ясно, если у меня есть папка с b.proto
и b.pb.go
, я добавляю a.proto
, а затем повторно запускаю свой компилятор для создания a.pb.go
, файловый дескриптор b.pb.go
будет увеличен с 0 до 1, а a.pb.go
получит новый filedescriptor0
.
Во-вторых, поскольку я использую шлюз gRPC, я хотел изменить пути в своих параметрах HTTP. Допустим, у меня есть RPC в a.proto
:
rpc GetFoo(GetFooRequest) returns (Foo) {
option (google.api.http) = {
get: "/v1alpha1/foo"
};
}
Когда я изменяю указанный выше путь на "/api/foo/v1alpha1/foo"
, a.pb.gw.go
меняется, но меняются и байты в поле a.pb.go
fileDescriptor0
.
Похоже, что нет какой-либо документации, в которой обсуждается, как эти поля используются, и несовместимы ли изменения в них, нарушающие изменения с другими привязками. Любая помощь приветствуется. Спасибо!