protobuf升级
时间: 2023-09-23 18:07:25 浏览: 118
protobuf
对于 protobuf 的升级问题,新版的 protobuf-gen-go 使用了 google.golang.org/protobuf/protoreflect,这导致编译出的 message 结构体与之前的版本完全不同。因此,在升级过程中可能会遇到一些麻烦。
其中一个问题是关于代码中对 XXX_Unmarshal 的直接调用。在老版的 protoc-gen-go 中,XXX_Unmarshal 方法会被暴露出来,可以直接在 proto.Unmarshal 时进行调用。但是,在新版的 protobuf-gen-go 中,编译出的 pb.go 文件中没有了 XXX_Unmarshal 方法,而是通过 ProtoReflect 接口来暴露 message 的内部信息。因此,如果你的代码中直接调用了 message.XXX_Unmarshal 方法,在编译时会报错,提示 message.XXX_Unmarshal 未定义。
另外,你还提到了新增了一个 flag,尝试使用 protoc --go-grpc_out=. helloworld.proto 命令。这个 flag 可能是用于生成 gRPC 相关的代码,具体的作用需要参考相关的文档来确认,因为在你提供的引用中没有提供足够的背景信息。
总之,当你升级 protobuf 时,需要注意新版的 protobuf-gen-go 使用了 protoreflect,并且编译出的 message 结构体与之前的版本完全不同。如果你的代码中直接调用了 XXX_Unmarshal 方法,需要修改为使用 ProtoReflect 接口来暴露 message 的内部信息。另外,如果有新增的 flag,需要查阅相关文档来了解其作用。
阅读全文