code: func (lr LineReader) ReadLine() (string, error) {
  	out := &bytes.Buffer{}
  	buf := make([]byte, 1) // important: we must only read one byte at a time!
  	for {
  		n, err := lr.r.Read(buf)
  		for i := 0; i < n; i++ {
  			if buf[i] == '\n' {
  				return out.String(), nil
  			}
  			// err is always nil
  			_ = out.WriteByte(buf[i])
  		}
  		// Callers should always process the n > 0 bytes returned before considering the error err.
  		if err != nil {
  			if err == io.EOF {
  				return out.String(), nil
  			}
  			return out.String(), err
  		}
  	}
  }
docs: // ReadLine reads one line w/o buffering