我是Go和Protobufs的新手,因此这可能是一个非常新手的问题。很抱歉。我的go项目中有几个包,我想创建一个单独的包,其中包含我所有的.proto(也是.pb.go)文件,然后我可以在任何其他包中导入这些原型文件,以更好地管理我的所有原型文件。但是当我将我的proto文件移动到一个名为“prototemps”的单独包中,并将“prototemps”导入到另一个名为“reader”的包中时。在reader.go中,我做: sensorData := &prototemps.Sensor{} err := proto.Unmarshal(msg.Payload(), sensorData) 它会产生此错误var sensorData *prototemps.Sensorcannot use sensorData (variable of type *prototemps.Sensor) as protoreflect.ProtoMessage value in argument to proto.Unmarshal: missing method ProtoReflect以下是我的项目结构:ProjectFolder/ /prototemps/<all .proto and .pb.go exist here> (Package "prototemps") /reader/reader.go which fails when tries to do proto.Unmarshall (Package "reader")这是我的 .proto 的样子syntax="proto3";package prototemps;import "google/protobuf/timestamp.proto";message sensor { string Name = 1; int32 ID = 2; string Type = 3; orientation Ori = 4; IO IO = 5; google.protobuf.Timestamp ts = 6;}message orientation { int32 X = 1; int32 Y = 2; int32 Z = 3;}message IO { int32 Reads = 1; int32 Writes = 2;}
3 回答
呼啦一阵风
TA贡献1802条经验 获得超6个赞
如果您对protoc-gen-go版本感到满意,您可能只想更改调用位置的导入。我知道有两个选项:go
proto.Unmarshal
"github.com/golang/protobuf/proto"
"google.golang.org/protobuf/proto"
试试你没有的那个。希望也能帮助别人!
慕田峪4524236
TA贡献1875条经验 获得超5个赞
错误消息指出该变量缺少方法。检查生成的文件,这是正确的。在类型上没有这样的方法。sensorData
ProtoReflect
Sensor
在我看来,你对不同版本的Go的protobuf有问题。确保使用的版本与用于编组/取消编组的文件的版本相同。*.pb.go
现在Go世界中有不同的软件包不兼容,因为有重大的API更改:https://blog.golang.org/protobuf-apiv2
如果你从protobuf开始,我肯定会尝试使用新的软件包。确保您遵循的任何介绍都使用您正在使用的软件包。
慕姐4208626
TA贡献1852条经验 获得超7个赞
检查你的$GOPATH/bin,看看是否有二进制文件叫做proto-gen-go-grpc
如果是这样,请尝试运行以下命令
protoc --go_out=. --go-grpc_out=. .proto
--go_out只在go lang中生成protobuf,但不会生成gGRPC方法
- 3 回答
- 0 关注
- 232 浏览
添加回答
举报
0/150
提交
取消