1 回答

TA贡献1772条经验 获得超8个赞
如果你写一个可变长度的字节片,另一端将不知道它需要读取多少字节。你也必须传达长度。
因此,发送字节切片的一种方法是首先使用固定大小的类型写入长度(字节数),例如int32or int64。然后简单地写入字节片。
例如:
var w io.Writer // This represents your connection
var a A
if err := binary.Write(w, binary.LittleEndian, int32(len(a.header))); err != nil {
// Handle error
}
if _, err := w.Write(a.header); err != nil {
// Handle error
}
您也可以使用相同的逻辑发送a.body。
另一方面,您可以这样阅读它:
var r io.Reader // This represents your connection
var a A
var size int32
if err := binary.Read(r, binary.LittleEndian, &size); err != nil {
// Handle error
}
a.header = make([]byte, size)
if _, err := io.ReadFull(r, a.header); err != nil {
// Handle error
}
在Go Playground上尝试一个工作示例。
如果您必须传输更复杂的结构,请考虑使用encoding/gobwhich 处理轻松发送切片。有关示例和一些见解,请参阅Efficient Go serialization of struct to disk。
- 1 回答
- 0 关注
- 143 浏览
添加回答
举报