code: func UploadSFTP(identityFile, host, dir string, files []string) error {
  	sftp := exec.Command("sftp")
  	sftp.Stdout = nil
  	sftp.Stderr = os.Stderr
  	if identityFile != "" {
  		sftp.Args = append(sftp.Args, "-i", identityFile)
  	}
  	sftp.Args = append(sftp.Args, host)
  	fmt.Println(">>>", strings.Join(sftp.Args, " "))
  	if *DryRunFlag {
  		return nil
  	}
  
  	stdin, err := sftp.StdinPipe()
  	if err != nil {
  		return fmt.Errorf("can't create stdin pipe for sftp: %v", err)
  	}
  	if err := sftp.Start(); err != nil {
  		return err
  	}
  	in := io.MultiWriter(stdin, os.Stdout)
  	for _, f := range files {
  		fmt.Fprintln(in, "put", f, path.Join(dir, filepath.Base(f)))
  	}
  	stdin.Close()
  	return sftp.Wait()
  }
docs: // UploadSFTP uploads files to a remote host using the sftp command line tool.
  // The destination host may be specified either as [user@]host[: or as a URI in
  // the form sftp://[user@]host[:port].