code: func (b *LookAheadBuffer) Peek(numBytes int) ([]byte, error) {
  	if numBytes < 0 {
  		return nil, errors.New("Cannot fill negative numBytes")
  	}
  	if numBytes > len(b.buffer) {
  		return nil, errors.Newf(
  			"Buffer full (buffer size: %d n: %d)",
  			len(b.buffer),
  			numBytes)
  	}
  
  	var err error
  	var numRead int
  	if b.bytesBuffered < numBytes {
  		numRead, err = io.ReadAtLeast(
  			b.src,
  			b.buffer[b.bytesBuffered:],
  			numBytes-b.bytesBuffered)
  		if err != nil {
  			if err == io.ErrUnexpectedEOF {
  				// ErrUnexpectedEOF is a terrible error only returned by
  				// ReadAtLeast.  Return EOF (i.e., the original error) instead
  				// ErrUnexpectedEOF since no one ever checks for this.
  				err = io.EOF
  			}
  		}
  	}
  
  	b.bytesBuffered += numRead
  
  	if numBytes > b.bytesBuffered {
  		numBytes = b.bytesBuffered
  	}
  	return b.buffer[:numBytes], err
  }
docs: // Peek returns a slice of the look ahead buffer which holds numBytes
  // number of bytes.  If the look ahead buffer does not already hold enough
  // bytes, it will read from the underlying reader to populate the rest.
  // NOTE: the returned slice is not a copy of the raw buffer.