1 回答

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超8個(gè)贊
如果你寫一個(gè)可變長(zhǎng)度的字節(jié)片,另一端將不知道它需要讀取多少字節(jié)。你也必須傳達(dá)長(zhǎng)度。
因此,發(fā)送字節(jié)切片的一種方法是首先使用固定大小的類型寫入長(zhǎng)度(字節(jié)數(shù)),例如int32or int64。然后簡(jiǎn)單地寫入字節(jié)片。
例如:
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
}
您也可以使用相同的邏輯發(fā)送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上嘗試一個(gè)工作示例。
如果您必須傳輸更復(fù)雜的結(jié)構(gòu),請(qǐng)考慮使用encoding/gobwhich 處理輕松發(fā)送切片。有關(guān)示例和一些見解,請(qǐng)參閱Efficient Go serialization of struct to disk。
- 1 回答
- 0 關(guān)注
- 141 瀏覽
添加回答
舉報(bào)