新版本的protoc-gen-go已经下降已知类型

时间:2018-05-25 15:22:17

标签: go protocol-buffers

有两个.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-产生" b.pb.go"没有这些下降?

1 个答案:

答案 0 :(得分:0)

go_package选项解决了这个问题,您应该在a.proto

中明确指定软件包

像这样:

syntax = "proto3";

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

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

因此您将从其他原型文件中的a.proto获取正确的生成类型