【发布时间】:2014-01-07 19:05:18
【问题描述】:
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
【问题讨论】:
-
你知道
SkipField1的大小吗? -
不幸的是,skipfield1 是一个不同大小的结构切片
-
我认为您可以定义一个新结构,该结构由指向另一个结构中三个固定长度字段的指针组成,
binary.Read会读入它。 (尚未测试且时间紧迫,因此不确定将其作为答案提交。) -
哦,你的 HeaderBuf 不错,++。