go-restruct / restruct

Rich binary (de)serialization library for Golang
https://restruct.io/
ISC License
352 stars 17 forks source link

restruct Go codecov.io godoc.org Go Report Card

restruct is a library for reading and writing binary data in Go. Similar to lunixbochs struc and encoding/binary, this library reads data based on the layout of structures and, like struc, based on what is contained in struct tags.

To install Restruct, use the following command:

go get github.com/go-restruct/restruct

restruct aims to provide a clean, flexible, robust implementation of struct packing. In the future, through fast-path optimizations and code generation, it also aims to be quick, but it is currently very slow.

restruct currently requires Go 1.7+.

Status

Example

package main

import (
    "encoding/binary"
    "io/ioutil"
    "os"

    "github.com/go-restruct/restruct"
)

type Record struct {
    Message string `struct:"[128]byte"`
}

type Container struct {
    Version   int `struct:"int32"`
    NumRecord int `struct:"int32,sizeof=Records"`
    Records   []Record
}

func main() {
    var c Container

    file, _ := os.Open("records")
    defer file.Close()
    data, _ := ioutil.ReadAll(file)

    restruct.Unpack(data, binary.LittleEndian, &c)
}