使用protogen工具后,我有一个用于发送消息的消息类型:type File struct { Info string `protobuf:"bytes,1,opt,name=info,json=info" json:"info,omitempty"` BytesValues []byte `protobuf:"bytes,2,opt,name=bytes_values,json=bytesValues,proto3" json:"bytes_values,omitempty"`}我正在尝试使用该BytesValues字段发送一些二进制数据,如下所示:filePath := filepath.Join("test", "myfile.bin")f, _ := ioutil.ReadFile(filePath) // error return value ignored for brevitymsg := File{BytesValues: f}body, _ := proto.Marshal(msg) // encode服务器似乎在解码我发送给它的消息时遇到问题。这是使用[]byte带有协议缓冲区的字段发送二进制数据的正确方法吗?
1 回答
长风秋雁
TA贡献1757条经验 获得超7个赞
就我而言,问题实际上是服务器没有从正确的字段中读取原始字节。
发送原始字节的正确方法是将字节设置为字段。无需以任何方式对字节进行编码,因为协议缓冲区是一种二进制格式。
filePath := filepath.Join("test", "myfile.bin")
f, _ := ioutil.ReadFile(filePath) // error return value ignored for brevity
msg := File{BytesValues: f}
body, _ := proto.Marshal(msg) // encode
- 1 回答
- 0 关注
- 156 浏览
添加回答
举报
0/150
提交
取消