首页 > 解决方案 > 新版本的 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”?

标签: goprotocol-buffers

解决方案


go_package选项解决了这个问题,你应该明确指定包a.proto

像这样:

syntax = "proto3";

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

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

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


推荐阅读