我正在嘗試編寫一個遊戲服務器,並且需要創建數據包,我將發送回客戶端。我將所有數據寫入bytes.Buffer
,然後我想在獲取字節並將其發送到客戶端之前,將數據包的總大小加上前綴。在字節的特定偏移處寫入。緩衝區
我在想是這樣的:
// is it bad to call `var b bytes.Buffer` every time I create a packet?
func CreatePacket() []byte {
var b bytes.Buffer
// size
binary.Write(b, binary.LittleEndian, 0) // insert at end
// body (variable number of writes)
binary.Write(b, binary.LittleEndian, data)
// update the size at offset 0
binary.Write(b, binary.LittleEndian, b.Len())
return b.Bytes()
}
但我找不到任何方法來尋求或修改偏移。
這不行,爲什麼?
var packet = b.Bytes()
// the size is really at offset 2. offset 0 is an ID.
binary.LittleEndian.PutUint16(packet, uint16(0xF3))
binary.LittleEndian.PutUint16(packet, uint16(len(packet)))
沒關係的最後一個問題,我想它了。 'binary.LittleEndian.PutUint16(packet [2:],uint16(len(packet)))' – majidarif