无法使用协议Buf对字节进行解组 [英] Can't unmarshal bytes using protobuf
本文介绍了无法使用协议Buf对字节进行解组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在编写一个简单的客户端-服务器来了解protocol buf。
我有以下message.proto文件:
syntax = "proto3";
package main;
message Text {
string name = 1;
int32 id = 2;
}
这是客户端的代码(忽略的错误):
mssg := &Text{Name: "John Doe", Id: 4721}
bytes, _ := proto.Marshal(mssg)
conn, _ := net.Dial(...)
conn.Write(bytes)
和服务器端:
...
message, _ := ioutil.ReadAll(conn)
mssg := Text{}
err = proto.Unmarshal(message, &mssg)
字节可以很好地通过套接字,但是当我在服务器端调用Unmarshal时,我得到以下错误:
死机:Text.state:
中的协议错误标记字段不足
奇怪的是,如果我在客户端调用Unmarshal,它会工作得很好。
我的协议版本是3.11.2,我是通过
go get google.golang.org/protobuf/cmd/protoc-gen-go
go install google.golang.org/protobuf/cmd/protoc-gen-go
我创建message.pb.go文件的方式
protoc.exe -I="." --go_out="." message.proto
这样看来,出现问题的原因是通过套接字发送字节,但它是一个具有完全相同值的切片。
推荐答案
如果您遇到此错误并且正在使用github.com/gogo/protobuf
,您可能会在此库中遇到一个预计不会很快解决的known issue。解决方法是改用其他原型库,如google.golang.org/protobuf/proto
。
这篇关于无法使用协议Buf对字节进行解组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文