go - 新版本的 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;
}
因此您将从a.proto
其他 proto 文件中获得正确生成的类型
推荐阅读
- twig - 用于 table.html.twig 的 drupal 8 模板建议
- c - 未使用的参数“状态”的用途是什么?
- java - springdata jpa中的OneToMany关系与外键也是复合主键的一部分
- node.js - Angular 应用程序无法通过 Socket.IO 与 Flask 通信
- angular - 如何使用 ngModel 在 div 的 innerhtml 属性上实现 2 路数据绑定
- html - 使用spring boot和mysql过滤数据html不起作用
- php - 仅将 WooCommerce 可变产品的最后一个变体保留在购物车中
- sql - 通过触发器函数管理新列,以便在 postgresql 中从一个模式复制到另一个模式
- r - 如何将 R 中一组离散变量的所有可能值组合在一起?
- c# - 在 .NET Core 类库的 Microsoft.AspNetCore.Hosting.Abstractions 程序集中找不到 IWebHostEnvironment