File createVersionedGoRoot(GoVer ver)
			throws IOException {
		String verTagName = getGoRepoTagName(GOLANG_REPO_DIR, ver);

		execGitCmd(GOLANG_REPO_DIR, null, "checkout", "-q", verTagName);

		File newGoRoot = new File(workDir, "goroot%s".formatted(ver));
		Msg.info(this, "Creating new GOROOT " + newGoRoot);

		FileUtilities.deleteDir(newGoRoot);
		FileUtilities.checkedMkdirs(newGoRoot);

		FileFilter notSrcDir = (f) -> {
			boolean isSrcDir = f.getParentFile().equals(systemGOROOT) && f.getName().equals("src");
			return !isSrcDir;
		};

		Msg.info(this, "Copying live GOROOT to versioned...");
		FileUtils.copyDirectory(systemGOROOT, newGoRoot, notSrcDir, true,
			StandardCopyOption.COPY_ATTRIBUTES);

		File repoSrcDir = new File(GOLANG_REPO_DIR, "src");
		File newSrcDir = new File(newGoRoot, "src");
		Msg.info(this, "Copying versioned src/...");
		FileUtils.copyDirectory(repoSrcDir, newSrcDir, null, true,
			StandardCopyOption.COPY_ATTRIBUTES);

		Msg.info(this, "Downloading mod dependencies...");
		recurseDir(newSrcDir, f -> {
			if (f.getName().equals("go.sum")) {
				Msg.info(this, "go mod download " + f.getParent());
				execGoCmd(newGoRoot, f.getParentFile(), null, "mod", "download", "-x");
			}
		});

		return newGoRoot;
	}
Build a frankenstein goroot directory using the guts of a go install (liveGoRoot) and
the src directory from a specific tagged version of a go git repo directory.

@param goRepoDir path to a golang git repo
@param liveGoRoot path to an installed golang instance
@param ver go version to checkout from the git repo and copy to the new directory
@return path to newly created goroot directory (under the workDir)
@throws IOException if failure
Ghidra/Features/Base/src/test/java/ghidra/app/util/bin/format/golang/rtti/GoApiSnapshotGeneratorTest.java