从 []byte 读取 uint8 而不创建 bytes.Buffer

Rit*_*wik -3 buffer go

如何阅读unit8[]byte而不创建bytes.Buffer。该值已像这样写入缓冲区,

buf := new(bytes.Buffer)
binary.Write(buf, binary.BigEndian, uint32(1))
binary.Write(buf, binary.BigEndian, uint8(1))
b := buf.Bytes()
Run Code Online (Sandbox Code Playgroud)

在解码时,它可以很容易地完成uint32,如下所示......

len := binary.BigEndian.Uint32(b[:4])
Run Code Online (Sandbox Code Playgroud)

但是对于uint8,检索我能想出的值的唯一方法是创建一个缓冲区,然后读取第一个字节,

buf := new(bytes.Buffer)
_, err := buf.Write(b[4:5])
// error handling ...
id = buf.ReadByte()
Run Code Online (Sandbox Code Playgroud)

encoding/binarypkg 中似乎没有用于uint8值检索的方法。我想这背后可能有一些很好的理由。

问题:有没有其他方法可以uint8[]byte不创建Buffer??

Cer*_*món 5

我们使用索引表达式uint8从切片中获取单个。

len := binary.BigEndian.Uint32(b[:4])
id := b[4]  // <-- index expression
Run Code Online (Sandbox Code Playgroud)

请注意,byte是一个别名uint8