我是Golang的新手,我正在尝试写入一个缓冲区,该缓冲区应该在开始写入之前填充到特定大小.
我的尝试:
buf := bytes.NewBuffer(make([]byte, 52))
var pktInfo uint16 = 243
var pktSize uint16 = 52
var pktLine uint16 = binary.LittleEndian.Uint16(data)
var pktId uint16 = binary.LittleEndian.Uint16(data[6:])
// header
binary.Write(buf, binary.LittleEndian, pktInfo)
binary.Write(buf, binary.LittleEndian, pktSize)
binary.Write(buf, binary.LittleEndian, pktLine)
// body
binary.Write(buf, binary.LittleEndian, pktId)
(...a lot more)
fmt.Printf("%x\n", data)
fmt.Printf("%x\n", buf.Bytes())
Run Code Online (Sandbox Code Playgroud)
问题是它是在字节之后写入而不是从开始写入.我怎么做?
您不需要重新分配切片bytes.Buffer,或者如果您需要,则需要设置上限而不是len:
buf := bytes.NewBuffer(make([]byte, 0, 52)) // or simply
buf := bytes.NewBuffer(nil)
Run Code Online (Sandbox Code Playgroud)
还有buf.Reset()但这是针对具体的例子是矫枉过正.
切片:大小指定长度.切片的容量等于其长度.可以提供第二整数参数以指定不同的容量; 它必须不小于长度,因此make([] int,0,10)分配长度为0且容量为10的切片.