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

使用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 brevity


msg := File{BytesValues: f}


body, _ := proto.Marshal(msg) // encode

服务器似乎在解码我发送给它的消息时遇到问题。这是使用[]byte带有协议缓冲区的字段发送二进制数据的正确方法吗?


小唯快跑啊
浏览 157回答 1
1回答

长风秋雁

就我而言,问题实际上是服务器没有从正确的字段中读取原始字节。发送原始字节的正确方法是将字节设置为字段。无需以任何方式对字节进行编码,因为协议缓冲区是一种二进制格式。filePath := filepath.Join("test", "myfile.bin")f, _ := ioutil.ReadFile(filePath) // error return value ignored for brevitymsg := File{BytesValues: f}body, _ := proto.Marshal(msg) // encode
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go