新版本的Protoc-gen-go删除了已知的类型



有两个 .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获得正确的生成类型

最新更新