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 關注
- 142 瀏覽
添加回答
舉報