有两个.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.”我不见了)
这个link 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;
}
所以你会在其他原型(prototype)文件中从 a.proto
获得正确的生成类型
关于go - 新版本的 protoc-gen-go 删除了已知的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50532446/