42 lines
874 B
Go
42 lines
874 B
Go
package iochan
|
|
|
|
import (
|
|
"bufio"
|
|
"io"
|
|
)
|
|
|
|
// DelimReader takes an io.Reader and produces the contents of the reader
|
|
// on the returned channel. The contents on the channel will be returned
|
|
// on boundaries specified by the delim parameter, and will include this
|
|
// delimiter.
|
|
//
|
|
// If an error occurs while reading from the reader, the reading will end.
|
|
//
|
|
// In the case of an EOF or error, the channel will be closed.
|
|
//
|
|
// This must only be called once for any individual reader. The behavior is
|
|
// unknown and will be unexpected if this is called multiple times with the
|
|
// same reader.
|
|
func DelimReader(r io.Reader, delim byte) <-chan string {
|
|
ch := make(chan string)
|
|
|
|
go func() {
|
|
buf := bufio.NewReader(r)
|
|
|
|
for {
|
|
line, err := buf.ReadString(delim)
|
|
if line != "" {
|
|
ch <- line
|
|
}
|
|
|
|
if err != nil {
|
|
break
|
|
}
|
|
}
|
|
|
|
close(ch)
|
|
}()
|
|
|
|
return ch
|
|
}
|