Overview
goのversionを複数使いたいケースにおいて brewを使ってしまうと常に最新のgoのversionになってしまいます。
複数versionを管理するために goenv
もありますが、高々goのversion管理のためだけに新しいツールを入れたりすると無駄な依存を発生させてしまい、環境が壊れることもあります。
そこで最も簡単にgoのversionを複数管理するためには、そういったツールから脱却して直でGOROOTを書き換えながら対応するのが一番楽だと気づきました。
やりたいこと
- 複数のgoのversionを扱いたい
- goenvみたいな余計なツールを使わずにシンプルに管理したい
- 余計なツールを入れると依存関係だったりversion違いで死ぬみたいなことが起こって原因特定しづらいから
手順
- goをversionごとに管理する専用のディレクトリを作成する。
- wgetでsrc(https://golang.org/dl/) からgoの欲しいversionをDownloadする。
- macを使っている場合は
goX.XX.darwin-amd64.tar.gz
というdarwin-amd64
とついているversionをDLしてきます。
- macを使っている場合は
- 使いたいgoのversionをGOROOTに指定します。
- 他のversionを使いたい時はshellの設定ファイル(zshrcやfish.config)でGOROOTを切り替えてpathを通し直せば簡単にversionを切りかえることは可能です。
$ wget https://dl.google.com/go/goX.XX.darwin-amd64.tar.gz $ tar -C /usr/local -xzf goX.XX.darwin-amd64.tar.gz # goというディレクトリ名になるのでversionがわかるように修正する $ mv go goX.XX
ref: https://golang.org/doc/install#install の Linux のタブ参照
fishでの管理の仕方
config.shのGOROOTの設定箇所は以下。
# go set GOROOT_PATH $HOME/.goroots/goX.XX.X set -x PATH $GOROOT_PATH/bin $PATH set -x GOROOT $GOROOT_PATH set -x GOPATH $HOME/.go set -x PATH $GOPATH/bin $GOROOT/bin $PATH
これをそのまま反映することで使いたいGoのversionにpathが通ります。
cf. https://medium.com/@vCabbage/go-installing-multiple-go-versions-from-source-db5573067c