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

标签 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-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/

相关文章:

go - 如何限制 Golang 中变量的值?

c# - 从 C# 读取 protobuf3 自定义选项

使用 TCell API 进行 TUI 编程

go - Go 中令人尴尬的并行任务的惯用解决方案是什么?

machine-learning - Inception5h 与 Inception V4,什么是 5h

sockets - Netty Detect传入请求是protobuf类型

go - 将 protobuf 与 golang 结合使用并处理 []byte HTTP 响应正文

java - 在哪里可以找到 Datastore Admin v1 API 的 Protobuf 定义?

戈朗 : How do I determine the number of lines in a file efficiently?

url - 在 Go 中添加查询字符串 url