为了账号安全,请及时绑定邮箱和手机立即绑定

使用协议缓冲区发送二进制数据的正确方法是什么?

使用协议缓冲区发送二进制数据的正确方法是什么?

Go
小唯快跑啊 2022-01-04 13:52:17
使用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


查看完整回答
反对 回复 2022-01-04
  • 1 回答
  • 0 关注
  • 156 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信