diff --git a/src/goInstallTools.ts b/src/goInstallTools.ts
index 13824e7..9694907 100644
--- a/src/goInstallTools.ts
+++ b/src/goInstallTools.ts
@@ -27,6 +27,7 @@
 	Tool,
 	ToolAtVersion,
 } from './goTools';
+import { getFromWorkspaceState } from './stateUtils';
 import {
 	getBinPath,
 	getGoConfig,
@@ -36,7 +37,7 @@
 	GoVersion,
 	rmdirRecursive,
 } from './util';
-import { envPath, getCurrentGoRoot, getToolFromToolPath, setCurrentGoRoot } from './utils/pathUtils';
+import { correctBinname, envPath, getCurrentGoRoot, getToolFromToolPath, setCurrentGoRoot } from './utils/pathUtils';
 
 // declinedUpdates tracks the tools that the user has declined to update.
 const declinedUpdates: Tool[] = [];
@@ -342,10 +343,11 @@
 }
 
 export function updateGoVarsFromConfig(): Promise<void> {
-	// FIXIT: if updateGoVarsFromConfig is called again after addGoRuntimeBaseToPATH sets PATH,
-	// the go chosen by getBinPath based on PATH will not change.
 	const goRuntimePath = getBinPath('go', false);
-	if (!goRuntimePath) {
+
+	if (!goRuntimePath || !path.isAbsolute(goRuntimePath)) {
+		// getBinPath returns the absolute path to the tool if it exists.
+		// Otherwise, it may return the tool name (e.g. 'go').
 		suggestDownloadGo();
 		return Promise.reject();
 	}
@@ -355,41 +357,80 @@
 			['env', 'GOPATH', 'GOROOT', 'GOPROXY', 'GOBIN', 'GOMODCACHE'],
 			{ env: toolExecutionEnvironment(), cwd: getWorkspaceFolderPath() },
 			(err, stdout, stderr) => {
-			if (err || stderr) {
-				outputChannel.append(`Failed to run '${goRuntimePath} env: ${err}\n${stderr}`);
-				outputChannel.show();
+				if (err || stderr) {
+					outputChannel.append(`Failed to run '${goRuntimePath} env: ${err}\n${stderr}`);
+					outputChannel.show();
 
-				vscode.window.showErrorMessage(`Failed to run '${goRuntimePath} env. The config change may not be applied correctly.`);
-				return reject();
-			}
-			const envOutput = stdout.split('\n');
-			if (!process.env['GOPATH'] && envOutput[0].trim()) {
-				process.env['GOPATH'] = envOutput[0].trim();
-			}
-			if (envOutput[1] && envOutput[1].trim()) {
-				setCurrentGoRoot(envOutput[1].trim());
-			}
-			if (!process.env['GOPROXY'] && envOutput[2] && envOutput[2].trim()) {
-				process.env['GOPROXY'] = envOutput[2].trim();
-			}
-			if (!process.env['GOBIN'] && envOutput[3] && envOutput[3].trim()) {
-				process.env['GOBIN'] = envOutput[3].trim();
-			}
-			if (!process.env['GOMODCACHE'] && envOutput[4] && envOutput[4].trim()) {
-				process.env['GOMODCACHE'] = envOutput[4].trim();
-			}
+					vscode.window.showErrorMessage(`Failed to run '${goRuntimePath} env. The config change may not be applied correctly.`);
+					return reject();
+				}
+				const envOutput = stdout.split('\n');
+				if (!process.env['GOPATH'] && envOutput[0].trim()) {
+					process.env['GOPATH'] = envOutput[0].trim();
+				}
+				if (envOutput[1] && envOutput[1].trim()) {
+					setCurrentGoRoot(envOutput[1].trim());
+				}
+				if (!process.env['GOPROXY'] && envOutput[2] && envOutput[2].trim()) {
+					process.env['GOPROXY'] = envOutput[2].trim();
+				}
+				if (!process.env['GOBIN'] && envOutput[3] && envOutput[3].trim()) {
+					process.env['GOBIN'] = envOutput[3].trim();
+				}
+				if (!process.env['GOMODCACHE'] && envOutput[4] && envOutput[4].trim()) {
+					process.env['GOMODCACHE'] = envOutput[4].trim();
+				}
 
-			// cgo, gopls, and other underlying tools will inherit the environment and attempt
-			// to locate 'go' from the PATH env var.
-			addGoRuntimeBaseToPATH(path.join(getCurrentGoRoot(), 'bin'));
-			initGoStatusBar();
-			// TODO: restart language server or synchronize with language server update.
+				// cgo, gopls, and other underlying tools will inherit the environment and attempt
+				// to locate 'go' from the PATH env var.
+				// Update the PATH only if users configured to use a different
+				// version of go than the system default.
+				if (!!goPickedByExtension()) {
+					addGoRuntimeBaseToPATH(path.join(getCurrentGoRoot(), 'bin'));
+				}
+				initGoStatusBar();
+				// TODO: restart language server or synchronize with language server update.
 
-			return resolve();
-		});
+				return resolve();
+			});
 	});
 }
 
+// The go command is picked up by searching directories in PATH by default.
+// But users can override it and force the extension to pick a different
+// one by configuring
+//
+//   1) with the go.environment.choose command, which stores the selection
+//      in the workspace memento with the key 'selectedGo',
+//   2) with 'go.alternateTools': { 'go': ... } setting, or
+//   3) with 'go.goroot' setting
+//
+// goPickedByExtension returns the chosen path if the default path should
+// be overridden by above methods.
+// TODO: This logic is duplicated in getBinPath. Centralize this logic.
+function goPickedByExtension(): string | undefined {
+	// getFromWorkspaceState('selectedGo')
+	const selectedGoPath: string = getFromWorkspaceState('selectedGo')?.binpath;
+	if (selectedGoPath) {
+		return selectedGoPath;
+	}
+
+	const cfg = getGoConfig();
+
+	// 'go.alternateTools.go'
+	const alternateTools: { [key: string]: string } = cfg.get('alternateTools');
+	const alternateToolPath: string = alternateTools['go'];
+	if (alternateToolPath) {
+		return alternateToolPath;
+	}
+	// 'go.goroot'
+	const goRoot: string = cfg.get('goroot');
+	if (goRoot) {
+		return path.join(goRoot, 'bin', correctBinname('go'));
+	}
+	return undefined;
+}
+
 let alreadyOfferedToInstallTools = false;
 
 export async function offerToInstallTools() {
