簡體   English   中英

protoc-gen-go的新版本刪除了已知類型

[英]new version of protoc-gen-go drops already known types

有兩個.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-genic並沒有說明新方法

我該怎么做才能使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獲取正確的生成類型

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM