code: func (r *ReverseReader) Read(p []byte) (n int, err error) {
  	//fmt.Printf("Offset %d\n", r.offset)
  	//fmt.Printf("Reading %d bytes\n", len(p))
  	switch {
  	case r.offset <= 0:
  		return 0, io.EOF
  	case r.offset-int64(len(p)) <= 0:
  		r.rs.Seek(0, os.SEEK_SET)
  		n, err = r.rs.Read(p[:r.offset])
  		r.rs.Seek(0, os.SEEK_SET)
  		r.offset = 0
  		return n, nil
  	default:
  		r.offset -= int64(len(p))
  		r.rs.Seek(r.offset, os.SEEK_SET)
  		n, err = r.rs.Read(p)
  		r.rs.Seek(r.offset, os.SEEK_SET)
  		return
  	}
  }
docs: // Read implements io.Reader interface
  // very likely bad performances due to the seeks