有两个 .proto 文件
第一个文件 | 名称 "A.proto">
syntax = "proto3";
package a;
message AMsg{
fixed64 smth1 = 1;
fixed64 smth2 = 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 没有提到新方法
我应该怎么做才能在没有这些下降的情况下使protoc-gen-go生成"b.pb.go"?
go_package
选项解决了这个问题,您应该在a.proto
中显式指定包
喜欢这个:
syntax = "proto3";
package a;
option go_package= "some_path/A";
message AMsg{
fixed64 smth1 = 1;
fixed64 smth2 = 2;
}
因此,您将从其他Proto文件中a.proto
获得正确的生成类型