code: func ReadLine(reader io.Reader) (line string, err error) {
  	buffer := bytes.NewBuffer(make([]byte, 0, 4096))
  	p := make([]byte, 1)
  	for {
  		var n int
  		n, err = reader.Read(p)
  		if err != nil || p[0] == '\n' {
  			break
  		}
  		if n > 0 {
  			buffer.WriteByte(p[0])
  		}
  	}
  	data := buffer.Bytes()
  	if len(data) > 0 && data[len(data)-1] == '\r' {
  		data = data[:len(data)-1]
  	}
  	return string(data), err
  }
docs: // ReadLine reads unbuffered until a newline '\n' byte and removes
  // an optional carriege return '\r' at the end of the line.
  // In case of an error, the string up to the error is returned.