Golang Go语言中使用gogo protobuf遇到的一个问题,求解答
使用 protobuf 定义一个结构
message One {
required uint32 type = 1;
required uint32 value = 2;
required uint32 size = 3;
}
使用 protobuf 官方的 go 插件得到的代码
type One struct {
Type *uint32 `protobuf:"varint,1,req,name=type" json:"type,omitempty"`
Value *uint32 `protobuf:"varint,2,req,name=value" json:"value,omitempty"`
Size *uint32 `protobuf:"varint,3,req,name=size" json:"size,omitempty"`
XXX_unrecognized []byte `json:"-"`
}
这里的 Size 字段是正常的,没有被修改,如果使用 gogoproto 插件生成的代码,就是这样的
type One1 struct {
Type *uint32 `protobuf:"varint,1,req,name=type" json:"type,omitempty"`
Value *uint32 `protobuf:"varint,2,req,name=value" json:"value,omitempty"`
Size_ *uint32 `protobuf:"varint,3,req,name=size" json:"size,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
Size 字段被编译成 Size_了 有没有办法解决这个问题呢
如果是新项目还好,这个是老的项目,有很多关联代码,修改起来好痛苦😭
Golang Go语言中使用gogo protobuf遇到的一个问题,求解答
更多关于Golang Go语言中使用gogo protobuf遇到的一个问题,求解答的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
gogo 里面有保留关键字。Size 是生成里面有这个方法。禁用 sizer ,使用 protosizer
更多关于Golang Go语言中使用gogo protobuf遇到的一个问题,求解答的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
确实, 通过 option (gogoproto.protosizer_all) = true;
能 生成 protosizer, 但是 gogofast 这个插件不支持 protosizer, gogo 这个插件可以, 但是 Benchmark 测试下来, gogo 的性能比 gogofast 差好多,难受
move on 吧。gogo 已经不维护了,proto codec 是性能瓶颈吗?一般情况下都是 i/o 先到瓶颈。
没到瓶颈,就是在切项目(祖传代码弄一个新的项目), 看到 gogo 比 go 官方自带的吊,想换一个.
确实 proto 的编码和解码目前还没到瓶颈, 没必要追求极致性能, gogo 能做到不修改代码,只修改一点点 proto 文件, 就用 gogo 吧
在Golang中使用gogo protobuf时遇到问题,通常可能涉及多个方面,包括protobuf定义文件(.proto)、gogo插件的使用、Go代码生成以及编译过程中的配置等。以下是一些常见的排查步骤和建议,希望能帮助你解决问题:
-
检查.proto文件:
- 确保.proto文件中的语法正确无误。
- 检查是否有未定义的字段类型或消息。
- 验证是否所有需要的import都已正确引入。
-
gogo插件配置:
- 确保gogo protobuf的插件已正确安装,并且版本与你的protobuf编译器兼容。
- 使用
protoc --gogo_out
时,检查指定的输出目录和参数是否正确。
-
代码生成:
- 运行
protoc
命令时,查看是否有错误信息输出,这通常会指出具体的问题所在。 - 检查生成的Go文件,看是否有明显的编译错误或不一致。
- 运行
-
编译问题:
- 确保你的Go环境配置正确,包括GOPATH和GOROOT。
- 如果使用了模块(Go Modules),确保你的go.mod文件中已正确声明了依赖。
-
查阅文档和社区:
- 查阅gogo protobuf的官方文档,了解最新的使用方法和最佳实践。
- 搜索相关的GitHub issues或Stack Overflow帖子,看是否有人遇到过类似问题。
如果上述步骤仍未解决问题,你可以提供更具体的错误信息或代码片段,以便进一步分析。希望这些建议能对你有所帮助!