package main import ( "bytes" "io" ) type Splitter struct { Delimiter []byte IgnoreEOF bool } func (that *Splitter) Split(data []byte, atEOF bool) (int, []byte, error) { for i := 0; i < len(data); i++ { if bytes.Equal(data[i:i+len(that.Delimiter)], that.Delimiter) { return i + len(that.Delimiter), data[:i], nil } } if len(data) == 0 || !atEOF { return 0, nil, nil } if atEOF && that.IgnoreEOF { return len(data), data, nil } return 0, data, io.ErrUnexpectedEOF }