http://play.golang.org/p/RQXB-hCq_M
type Header struct {
ByteField1 uint32 // 4 bytes
ByteField2 [32]uint8 // 32 bytes
ByteField3 [32]uint8 // 32 bytes
SkipField1 []SomethingElse
}
func main() {
var header Header
headerBytes := make([]byte, 68) // 4 + 32 + 32 == 68
headerBuf := bytes.NewBuffer(headerBytes)
err := binary.Read(headerBuf, binary.LittleEndian, &header)
if err != nil {
fmt.Println(err)
}
fmt.Println(header)
}
我不想从缓冲区中读取块中的头部结构。我想一步读入字节字段但跳过非字节字段。如果你在给定的链接(http://play.golang.org/p/RQXB-hCq_M)中运行该程序,你会发现binary.Read抛出错误:binary.Read:invalid type [] main.SomethingElse
有没有办法可以跳过这个字段?
更新: 根据dommage的答案,我决定将字段嵌入结构中,而不是像这样 http://play.golang.org/p/i0xfmnPx4A
答案 0 :(得分:1)
您可以通过在_(下划线)前面添加名称来跳过字段。
但:binary.Read()
要求所有字段都具有已知大小。如果SkipField1
具有可变或未知长度,则必须将其从结构中删除。
然后,您可以使用io.Reader.Read()
手动跳过输入的跳过字段部分,然后再次致电binary.Read()
。