code: func (h *Finder) Iterate(hash uint32, buf []byte, iterFunc func(int64) bool) (bool, error) {
  	if h == nil || hash == 0 || len(buf) != h.size {
  		return false, nil
  	}
  
  	for _, offset := range h.offsets[hash] {
  		_, err := h.reader.Seek(offset, io.SeekStart)
  		if err != nil {
  			return false, err
  		}
  		_, err = h.reader.Read(buf)
  		if err != nil {
  			return false, err
  		}
  		if !iterFunc(offset) {
  			return true, nil
  		}
  	}
  	return false, nil
  }
docs: // Iterate iterates all available blocks that matches the provided hash, reads
  // them into buf, and calls the iterator function. The iterator function should
  // return whether it wishes to continue iterating.