WindowsにGoをインストールしようとしてハマった

はじめに

久しぶりのGo案件なので、改めてインストールしなおしたら動かなくなった。

結論としては環境変数でGOROOTを設定して解決しました。

環境

  • Windows10
  • Go 1.16.5

インストール

公式からインストーラをダウンロードしてインストール
https://golang.org/doc/install

f:id:katutoki:20210613104512p:plain 次へ

f:id:katutoki:20210613104512p:plain 次へ

f:id:katutoki:20210613104533p:plain 次へ

Programing Filesで良くなったみたいですね。
昔はCドライブ直下でしたよね。
f:id:katutoki:20210613104550p:plain

f:id:katutoki:20210613104705p:plain

インストール完了 f:id:katutoki:20210613104751p:plain

確認

C:\>go version
go: cannot find GOROOT directory: ~\go

おぉぅ。
GOROOTがおかしいみたい。
デフォルトでユーザディレクトリ配下を見てしまっているようです。

GOROOT設定しない方がいいと色々な記事には書いているみたいなのですが、
複数バージョン入れているような場合には設定するようなこともないようなので、
GOROOTを設定してみます。

f:id:katutoki:20210613110634p:plain

C:\>go version
go version go1.16.5 windows/amd64

無事確認ができました。

おまけ

コマンドで環境変数設定

コマンドプロンプト

SET GOROOT=C:\Program Files\Go

これだと、コマンドプロンプトを閉じると設定が戻ってしまいます。
永続的に設定をするためには、下記のコマンド実行

SETX GOROOT "C:\Program Files\Go"

上記はユーザ環境変数に対して設定されます。
システム環境変数に設定したい場合はパラメータで「/M」を指定

SETX /M GOROOT "C:\Program Files\Go"

Powershell

$ENV:GOROOT="C:\Program Files\Go"

コマンドプロンプトのSETと同様こちらも設定が戻ってしまいます。

永続的に設定するには以下

[System.Environment]::SetEnvironmentVariable("GOROOT", "C:\Program Files\Go", "User")

ちょっと長すぎて覚えられないですね。

SETXがPowershellでも使えました。書き方はコマンドプロンプトと同じなのでこちらの方がお手軽です。

SETX /M GOROOT "C:\Program Files\Go"

SETも試してみましたが何も起きず。
エラーにもならないので、設定されていると勘違いしそうな罠です。

追記

上記の設定でVSCodeを開くと拡張機能のGoのTool類のインストールが失敗してしまいました。
VSCode内では~\goを見ようとしているみたいです。
システム環境変数に設定を変えてみたり、VSCodeの設定にgoroot、gopathを設定してみましたが、結果変わらず。
ひとまず、1つづつgo getを自前で実行することでインストールは出来ましたが、
根本解決は引き続き。