Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 

27 linhas
490 B

  1. package main
  2. import (
  3. "bytes"
  4. "io"
  5. )
  6. type Splitter struct {
  7. Delimiter []byte
  8. IgnoreEOF bool
  9. }
  10. func (that *Splitter) Split(data []byte, atEOF bool) (int, []byte, error) {
  11. for i := 0; i < len(data); i++ {
  12. if bytes.Equal(data[i:i+len(that.Delimiter)], that.Delimiter) {
  13. return i + len(that.Delimiter), data[:i], nil
  14. }
  15. }
  16. if len(data) == 0 || !atEOF {
  17. return 0, nil, nil
  18. }
  19. if atEOF && that.IgnoreEOF {
  20. return len(data), data, nil
  21. }
  22. return 0, data, io.ErrUnexpectedEOF
  23. }