новая версия protoc-gen-go сбрасывает уже известные типы - PullRequest
0 голосов
/ 25 мая 2018

Существует два файла .proto

1-й файл |имя "a.proto"

syntax = "proto3";

package a;

message AMsg{
    fixed64 smth1 = 1;
    fixed64 smth2 = 2;
}

2-й файл |имя "b.proto"

syntax = "proto3";

package b;

import "a.proto";

message BMsg {
    a.AMsg msg1 = 1;
    a.AMsg msg2 = 2;
}

в предыдущих версиях protoc-gen-go генерируется следующий код:

файл "a.pb.go"

package b

import proto "github.com/golang/protobuf/proto"
import fmt "fmt"
import math "math"    

. . .  

type AMsg struct {
    smth1 uint64 
    smth2 uint64 
}

. . . 

файл "b.pb.go"

package b

import proto "github.com/golang/protobuf/proto"
import fmt "fmt"
import math "math"   
import "a"

. . .  

type BMsg struct {
    msg1 *a.AMsg
    msg2 *a.AMsg
}

. . . 

и все было в порядке,

, но

однажды пришла новая версия protoc-gen-go

и , файл "b.pb.go" теперь выглядит так:

package b

import proto "github.com/golang/protobuf/proto"
import fmt "fmt"
import math "math"   

. . .  

type BMsg struct {
    msg1 *AMsg
    msg2 *AMsg
}

. . . 

вы можете заметить, что здесь уже опущены уже известные типы, но я не могу выяснить причину.(то есть префикс «a». я пропустил)

эта ссылка https://developers.google.com/protocol-buffers/docs/reference/go-generated ничего не говорит о новом подходе

Что мне нужно сделать, чтобы Proto-gen-goгенерировать "b.pb.go" без этих падений?

1 Ответ

0 голосов
/ 30 августа 2018
Опция

go_package решает эту проблему, вы должны явно указать пакет в a.proto

следующим образом:

syntax = "proto3";

package a;
option go_package= "some_path/A";

message AMsg{
    fixed64 smth1 = 1;
    fixed64 smth2 = 2;
}

, так что вы получите правильно сгенерированные типы из a.proto вдругие прото файлы

...