1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

VSCodeのGo言語拡張から学ぶGOROOT

Last updated at Posted at 2020-05-05

はじめに

A Tour of GoをやるためにローカルにGoをインストールしたのですが、環境変数設定やPathを通していないのにVSCodeでデバッグなしで実行が選べた為、不思議に思い拡張のソースコードを読んで疑問を解決したので一応の共有です。

結論

デフォルトインストールディレクトリの/usr/local/go/bin/goを直接見ていたので環境変数設定やPathを通してなくても実行できた。

調査環境

  • Ubuntu 20.04LTS
  • go version go1.14.2 linux/amd64

調査内容

環境変数設定やPathを通していないのに実行できるということは、どこかでインストールディレクトリを見ているという予想ができるので拡張の中身をそれっぽい文字列で検索してみる

jh1ovv@ThinkPad-X1:~$ pwd
/home/jh1ovv
jh1ovv@ThinkPad-X1:~$ cd .vscode/extensions/
jh1ovv@ThinkPad-X1:~/.vscode/extensions$ find ms-vscode.go-0.14.1/ -type f | xargs grep bin/go
ms-vscode.go-0.14.1/out/src/goPath.js:        const defaultPathForGo = process.platform === 'win32' ? 'C:\\Go\\bin\\go.exe' : '/usr/local/go/bin/go';
/home/jh1ovv/.vscode/extensions/ms-vscode.go-0.14.1/out/src/goPath.js
...
	// Check GOROOT (go, gofmt, godoc would be found here)
	const pathFromGoRoot = getBinPathFromEnvVar(binname, process.env['GOROOT'], true);
	if (pathFromGoRoot) {
		binPathCache[toolName] = pathFromGoRoot;
		return pathFromGoRoot;
	}

	// Finally search PATH parts
	const pathFromPath = getBinPathFromEnvVar(binname, envPath, false);
	if (pathFromPath) {
		binPathCache[toolName] = pathFromPath;
		return pathFromPath;
	}

	// Check default path for go
	if (toolName === 'go') {
		const defaultPathForGo = process.platform === 'win32' ? 'C:\\Go\\bin\\go.exe' : '/usr/local/go/bin/go';
		if (executableFileExists(defaultPathForGo)) {
			binPathCache[toolName] = defaultPathForGo;
			return defaultPathForGo;
		}
		return;
	}
...

デフォルトインストールディレクトリの/usr/local/go/bin/goを直接見ていた

おわりに

複数プロジェクトなどで複数バージョンを使う場合はどうやっても何かしらのPATHを設定しないといけないので、完全に小ネタです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?