src/util: use GOMODCACHE if available

GOMODCACHE environment variable is available from go1.15.

Updates golang/vscode-go#248

Change-Id: Ic62198dd2b7dcc6be46e7b7208c2499ad5fdc046
Reviewed-on: https://go-review.googlesource.com/c/vscode-go/+/240695
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
diff --git a/src/goInstallTools.ts b/src/goInstallTools.ts
index 3722807..62b22fc 100644
--- a/src/goInstallTools.ts
+++ b/src/goInstallTools.ts
@@ -354,7 +354,7 @@
 	}
 
 	return new Promise<void>((resolve, reject) => {
-		cp.execFile(goRuntimePath, ['env', 'GOPATH', 'GOROOT', 'GOPROXY', 'GOBIN'], (err, stdout, stderr) => {
+		cp.execFile(goRuntimePath, ['env', 'GOPATH', 'GOROOT', 'GOPROXY', 'GOBIN', 'GOMODCACHE'], (err, stdout, stderr) => {
 			if (err) {
 				return reject();
 			}
@@ -371,6 +371,9 @@
 			if (!process.env['GOBIN'] && envOutput[3] && envOutput[3].trim()) {
 				process.env['GOBIN'] = envOutput[3].trim();
 			}
+			if (!process.env['GOMODCACHE']) {
+				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.
diff --git a/src/util.ts b/src/util.ts
index fc24810..ec2e6df 100644
--- a/src/util.ts
+++ b/src/util.ts
@@ -492,6 +492,9 @@
 }
 
 export function getModuleCache(): string {
+	if (process.env['GOMODCACHE']) {
+		return process.env['GOMODCACHE'];
+	}
 	if (currentGopath) {
 		return path.join(currentGopath.split(path.delimiter)[0], 'pkg', 'mod');
 	}