package pack import ( "encoding/binary" "fmt" "io" ) type Package struct { Version [2]int8 Datalen int64 Data []byte } func (p *Package) String() string { return fmt.Sprintf("Version:%d DataLen:%d Data:%s", p.Version, p.Datalen, p.Data) } func (p *Package) Pack(w io.Writer) { binary.Write(w, binary.BigEndian, p.Version) binary.Write(w, binary.BigEndian, p.Datalen) binary.Write(w, binary.BigEndian, p.Data) } func (p *Package) Unpack(r io.Reader) { binary.Read(r, binary.BigEndian, &p.Version) binary.Read(r, binary.BigEndian, &p.Datalen) if p.Datalen > 0 { p.Data = make([]byte, p.Datalen) } binary.Read(r, binary.BigEndian, &p.Data) } func BuildMsg(data []byte) Package { var pkg Package pkg.Version[0] = 'V' pkg.Version[1] = 1 pkg.Data = data pkg.Datalen = int64(len(pkg.Data)) return pkg }