code: func (r *Reader) Prefix(p string) (io.Reader, error) {
  	r.l.Lock()
  	defer r.l.Unlock()
  
  	if r.prefixes == nil {
  		r.prefixes = make(map[string]*io.PipeWriter)
  	}
  
  	if _, ok := r.prefixes[p]; ok {
  		return nil, fmt.Errorf("Prefix already registered: %s", p)
  	}
  
  	pr, pw := io.Pipe()
  	r.prefixes[p] = pw
  
  	if r.done {
  		pw.Close()
  	}
  
  	return &prefixReader{
  		r:  r,
  		pr: pr,
  	}, nil
  }
docs: // Prefix returns a new io.Reader that will read data that
  // is prefixed with the given prefix.
  //
  // The read data is line-oriented so calling Read will result
  // in a full line of output (including the line separator),
  // but is exposed as an io.Reader for useful utility interoperating
  // with other Go libraries.
  //
  // The data read has the prefix stripped, but contains the line
  // delimiter.
  //
  // An empty prefix "" will read the data before any other prefix match is
  // found, allowing you to have a default reader before a prefix is matched.