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

動かない。。。