Go のバージョンマネージャー gvm で gvm install したら「ERROR: Failed to compile」って言われた時
issue には上げたけど日本語でも書く。 結果から言うと自分が README.md よく読んでなかっただけ。 でも gvm ももうちょっと気を利かせてくれてもいいのになーと思ったので上の issue でお願いしたという経緯です。
解決法
Go 1.5 以上をコンパイルする場合は GOROOT_BOOTSTRAP
って環境変数を定義する必要があります。
これは .bash_profile
かなんかで
export GOROOT_BOOTSTRAP=$GOROOT
して gvm install すればいいのですが、「GOROOT
?そんなん定義したことないんだけど…」って人もいるかと思います
(現に今は GOROOT
環境変数は定義する必要はないらしいです)。
GOROOT
は Java にとっての JAVA_HOME
みたいなもので、go
コマンド等のベースパスを指定するものです。
で、じゃあどうすればいいのかというと、go
コマンド自体に聞いてしまえばいいとのこと。
export GOROOT_BOOTSTRAP=$(go env GOROOT)
これで GOROOT_BOOTSTRAP
には go
コマンド等のベースパスが入ります。
もちろん go
コマンドに PATH
が通ってないとダメなので後述するように先に PATH
を設定してやります。
どう設定すればいいか
自分の Go 関連の .bash_profile
を載せておきます(今回の話に関係ないのもありますが)。
# Go 1.5 以下で vendoring が有効になる # http://yoru9zine.hatenablog.com/entry/2016/02/02/054922 export GO15VENDOREXPERIMENT=1 if true; then # gvm の go コマンドを使う [[ -s "/home/tyru/.gvm/scripts/gvm" ]] && source "/home/tyru/.gvm/scripts/gvm" export GOROOT_BOOTSTRAP=$(go env GOROOT) else # system 標準の go コマンドを使う export GOPATH="$HOME/go" export PATH="$GOPATH/bin:$PATH" fi
true, false で gvm の Go か system の Go かを切り替えられるようにしてあります。