code: func ReadDataUntil(r *bufio.Reader, until func(byte) bool) []byte {
  	result := make([]byte, 0, 10)
  	c, err := peek(r)
  	for err != io.EOF && !until(c) {
  		r.ReadByte()
  		result = append(result, c)
  		c, err = peek(r)
  	}
  	return result
  }
docs: // ReadDataUntil will read and collect bytes from the reader until it encounters EOF or the given function returns true.