Implement a custom binary protocol parser in Go by defining a struct for your message format and using encoding/binary to read fields sequentially from an io.Reader.
package main
import (
"encoding/binary"
"fmt"
"io"
)
type Message struct {
ID uint16
Len uint32
Data []byte
}
func ParseMessage(r io.Reader) (*Message, error) {
var m Message
if err := binary.Read(r, binary.BigEndian, &m.ID); err != nil {
return nil, err
}
if err := binary.Read(r, binary.BigEndian, &m.Len); err != nil {
return nil, err
}
m.Data = make([]byte, m.Len)
if _, err := io.ReadFull(r, m.Data); err != nil {
return nil, err
}
return &m, nil
}
func main() {
// Example usage with a buffer
// msg, err := ParseMessage(reader)
fmt.Println("Parser ready")
}