routes/template.go (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | package routes
import (
"bytes"
"io"
)
func countLines(r io.Reader) (int, error) {
buf := make([]byte, 32*1024)
bufLen := 0
count := 0
nl := []byte{'\n'}
for {
c, err := r.Read(buf)
if c > 0 {
bufLen += c
}
count += bytes.Count(buf[:c], nl)
switch {
case err == io.EOF:
/* handle last line not having a newline at the end */
if bufLen >= 1 && buf[(bufLen-1)%(32*1024)] != '\n' {
count++
}
return count, nil
case err != nil:
return 0, err
}
}
}
|