如何从不同的包导入 Proto 文件而不遇到“Missing Method Protoreflect”错误
在 Go 中,protobuf 通常用于数据序列化。将 protobuf 组织到不同的包中时,可能会遇到与缺少 ProtoReflect 方法相关的错误。当尝试将数据解组到单独包中定义的自定义 protobuf 结构时,会发生此错误。
要解决此问题,请确保执行以下步骤:
确保一致的 Protobuf 对象注册:
在每个使用自定义 protobuf 结构的包中,应导入由 protoc 生成的相应 *.pb.go 文件。这会将 protobuf 结构注册到 ProtoReflect 库,从而实现无缝解组。
验证导入语法:
检查包中的导入语句,其中执行解组。确保导入路径匹配:
根据现有依赖项使用适当的导入路径。
示例:
考虑定义了 protobuf 文件的项目结构在名为 prototemps 的单独包中。
ProjectFolder/ /prototemps/<all .proto and .pb.go exist here> (Package "prototemps") /reader/reader.go which fails when tries to do proto.Unmarshall (Package "reader")
要解决 reader 包中的错误,请确保使用正确的导入语句:
<code class="go">package reader import ( "google.golang.org/protobuf/proto" )</code>
通过执行以下步骤,您可以成功从不同的包导入 proto 文件并将数据解组到自定义 protobuf 结构中,而不会遇到“缺少方法 protoreflect”错误。
以上是如何解决Go中从不同包导入Proto文件时出现“Missing Method Protoreflect”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!