code: func (td *TempDir) With(fn func(string) error) error {
  	tdir, err := ioutil.TempDir(td.Dir, td.Prefix)
  	if err != nil {
  		return err
  	}
  	defer func() {
  		if rmErr := RemoveAll(tdir); rmErr != nil {
  			if cef := td.CleanupErrFunc; cef != nil {
  				cef(tdir, rmErr)
  			}
  		}
  	}()
  	return fn(tdir)
  }
docs: // With creates a temporary directory and passes it to fn. After fn  exits, the
  // directory and all of its contents is deleted.
  //
  // Any error that happens during setup or execution of the callback is returned.
  // If an error occurs during cleanup, the optional CleanupErrFunc will be
  // called.