概要
前回は、goenvを使用してグローバルのバージョン設定をするまでをやりました。
今回は、バージョンの切り替えと優先順位について調べてみたいと思います。
バージョン指定の選択肢
ざっくり3種類あります
- 環境変数(GOENV_VERSION)
- ローカル(.go-version)
- グローバル(~/.goenv/version)
優先順位
結果は、以下の順になります。
(強い) 環境変数 > ローカル > グローバル (弱い)
検証
検証のために、Goのバージョンをこのように設定してみたいと思います。
- 環境変数 1.8.0
- ローカル 1.6.0
- グローバル 1.11.0
準備
Goのバージョンをインストールしてない場合は、goenvコマンドで事前にインストールしておきましょう。
$ goenv install 1.11.0
$ goenv install 1.8.0
$ goenv install 1.6.0
グローバルに設定
デフォルト設定です。
グローバル一強時代の始まりです。
# 設定
$ goenv global 1.11.0
# 確認
$ goenv version
1.11.0 (set by /Users/yourpath/.goenv/version)
ローカルに設定
ディレクトリ別に指定したいときなんかに使います。
グローバル vs ローカル になります。
# ディレクトリ作っておく
$ mkdir goenvv160 && cd goenvv160
# 設定
$ goenv local 1.6.0
# 確認
$ goenv version
1.6.0 (set by /Users/yourpath/go/src/goenvv160/.go-version)
goenv local でバージョン指定をすると、.go-version
ファイルがディレクトリ直下に作られます。
ローカルのバージョンが優先されていることが分かります。
ディレクトリ別の設定をやめたいときは、unsetすると.go-version
ファイルがなくなりデフォルトのバージョンになります。
$ goenv local --unset
$ goenv version
1.11.0 (set by /Users/yourpath/.goenv/version)
localの設定をなくしたので、glovalのバージョンが表示されていますね。
環境変数に設定
goenv shellを設定すると、$GOENV_VERSION
にバージョンが設定されます。
グローバル vs 環境変数 になります。
# 事前確認
$ echo $GOENV_VERSION
# 設定
$ goenv shell 1.8.0
# 確認
goenv version
$ 1.8.0 (set by GOENV_VERSION environment variable)
$ echo $GOENV_VERSION
1.8.0
ここでは、環境変数が優先されていることが分かります。
環境変数への設定をやめたいときは、unsetします。
$ goenv shell --unset
$ goenv version
1.11.0 (set by /Users/yourpath/.goenv/version)
最終確認
ローカル vs 環境変数 の確認だけしておきたいと思います。
# ローカル設定有効
$ cd goenvv160
$ goenv local 1.6.0
$ goenv version
1.6.0 (set by /Users/yourpath/go/src/goenvv160/.go-version)
# 環境変数有効
$ goenv shell 1.8.0
# どっちも有効なときは、環境変数の勝ち
$ goenv version
1.8.0 (set by GOENV_VERSION environment variable)
最後に
これでgoenvの良さが分かってきた気がします。
古いバージョンをいつまでも動かし続けることはあまり想定されませんが、新しいパッケージを入れたときに最新だと動かないけどひとつ前に戻したら動いたー。とかありそうですね。
Goのインストールが簡単にできたので、これからGoのなんたるやを学びたいと思います。