Go 1.4 on windows で "go: cannot find GOROOT directory:" が出るときの対応
通常は "go: cannot find GOROOT directory:" がでるのでは Go を c:\go にインストールせず、GOROOT を設定しない場合かな。
いままでGOROOTを設定していて Go1.3 までは大丈夫だったが、Go 1.4 から "go: cannot find GOROOT directory:" とでるようになった。
Go 側の仕様変更なのかとおもったがハマっている人もあまりいない感じ。
原因は GOROOT を ジャンクションで作成しているからのようだ。
ジャンクションを使っていて初めて遭遇した動かないパターン。
シンボリックリンクはコマンドプロンプトを管理者として起動する必要があるのでできればつかいたくないんだけどな。。。
C:\dev>dir /B go* go-1.3.3 go-1.4 C:\dev>set GOROOT=c:\dev\go-1.3.3 C:\dev>set PATH=%GOROOT%\bin;%PATH% C:\dev>go version go version go1.3.3 windows/amd64 C:\dev>set GOROOT=c:\dev\go-1.4 C:\dev>set PATH=%GOROOT%\bin;%PATH% C:\dev>go version go version go1.4 windows/amd64
普通に問題なく動く。
でもc:\dev\go を GOROOTにしたいので(バージョンを切り替えやすくするため)
C:\dev>set GOROOT=c:\dev\go C:\dev>set PATH=%GOROOT%\bin;%PATH% C:\dev>mklink /J c:\dev\go c:\dev\go-1.3.3 c:\dev\go <<===>> c:\dev\go-1.3.3 のジャンクションが作成されました C:\dev>go version go version go1.3.3 windows/amd64 c:\dev>rmdir go C:\dev>mklink /J c:\dev\go c:\dev\go-1.4 c:\dev\go <<===>> c:\dev\go-1.4 のジャンクションが作成されました C:\dev>go version go: cannot find GOROOT directory: c:\dev\go
ジャンクションじゃだめなのとかとシンボリックでためす。
管理者としてコマンドプロンプトを起動しなおす。
C:\dev>rmdir go C:\dev>set GOROOT=c:\dev\go C:\dev>set PATH=%GOROOT%\bin;%PATH% c:\dev>mklink /D c:\dev\go c:\dev\go-1.4 c:\dev\go <<===>> c:\dev\go-1.4 のシンボリック リンクが作成されました C:\dev>go version go version go1.4 windows/amd64
うごいた。Go 1.3.3でももちろん問題ない。
ちなみにフルパス指定じゃないとだめなようだ。
C:\dev>rmdir go c:\dev>mklink /D go go-1.4 go <<===>> go-1.4 のシンボリック リンクが作成されました C:\dev>go version go version go1.4 windows/amd64
うまくいったようにみえるが、別にコマンドプロンプトを起動。
c:\>set GOROOT=c:\dev\go c:\>set PATH=%GOROOT%\bin;%PATH% c:\>go version go: cannot find GOROOT directory: c:\dev\go
動かない。。。