code: func MD5FromFileFast(r io.ReadSeeker) (string, error) {
  	const (
  		// Do not change once set in stone!
  		maxChunks = 8
  		peekSize  = 64
  		seek      = 2048
  	)
  
  	h := md5.New()
  	buff := make([]byte, peekSize)
  
  	for i := 0; i < maxChunks; i++ {
  		if i > 0 {
  			_, err := r.Seek(seek, 0)
  			if err != nil {
  				if err == io.EOF {
  					break
  				}
  				return "", err
  			}
  		}
  
  		_, err := io.ReadAtLeast(r, buff, peekSize)
  		if err != nil {
  			if err == io.EOF || err == io.ErrUnexpectedEOF {
  				h.Write(buff)
  				break
  			}
  			return "", err
  		}
  		h.Write(buff)
  	}
  
  	return hex.EncodeToString(h.Sum(nil)), nil
  }
docs: // MD5FromFileFast creates a MD5 hash from the given file. It only reads parts of
  // the file for speed, so don't use it if the files are very subtly different.
  // It will not close the file.