繁体   English   中英

Golang:如何从缓冲区读取内容时跳过结构字段?

[英]Golang: How to skip struct fields while reading from a buffer?

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:无效类型[] main.SomethingElse

有没有一种方法可以跳过此字段?

更新:根据dommage的答案,我决定将字段嵌入结构体中,而不是像这样http://play.golang.org/p/i0xfmnPx4A

您可以通过使用_(下划线)作为名称的前缀来跳过该字段。

但是binary.Read()要求所有字段都具有已知大小。 如果SkipField1的长度可变或未知,则必须将其保留在结构之外。

然后,您可以使用io.Reader.Read()手动跳过输入的跳过字段部分,然后再次调用binary.Read()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM