0
0

複数バージョンの Go

Last updated at Posted at 2024-05-27

Go Toolchains

Go には Go Toolchains という機能があって、自分で複数バージョンの Go をインストールする必要はないかも。

  • デフォルトの Go が go.mod の指定よりも新しい時、デフォルトの Go が動く。
  • デフォルトの Go が go.mod の指定よりも古い時、go.mod に指定された Go をインストールして使う。

ここで面白い事に、新しい Go がインストールされてもデフォルトの Go は勝手に新しい物と入れ替わらない。go.mod の記述が新しくて新しい Go がインストールされた後でも go コマンドは古いままだ。

go.mod の指定を無視して強制的に切り替えるには GOTOOLCHAIN 環境変数を使う。例えば。

$ go version
go version go1.22.3 darwin/arm64

$ GOTOOLCHAIN=go1.20.14 go version
go: downloading go1.20.14 (darwin/arm64)
go version go1.20.14 darwin/arm64

あと、何に使うのかわからないが GOTOOLCHAIN=バージョン+auto という設定もある。auto とはデフォルトのバージョン自動設定の動作なのだが、バージョン+auto とすると自動設定を行う Go のバージョンを指定できる。例えば go.mod の指定が go 1.22 の時 GOTOOLCHAIN=go1.21.4+auto を指定すると、go1.21.4 の時代の自動設定にはバグがあるので以下のようにエラーになる。

GOTOOLCHAIN=go1.21.4+auto go version
go: downloading go1.22 (darwin/arm64)
go: download go1.22 for darwin/arm64: toolchain not available

以下古いメモ

これも何度も忘れるのでメモする。

  • Go のインストーラを使うと、Go は /usr/local/go にインストールされる。
    • あとで別のバージョンのインストーラを使うと、/usr/local/go は削除される。
  • go install コマンドでインストールすると、Go は ~/go/bin~/sdk にインストールされる。

例えば 1.21.4 を使いたい時はこうする。なぜ二度コマンドが必要なのかは不明。

go install golang.org/dl/go1.21.4@latest
go1.21.4 download

.zprofile など設定ファイルの中で alias をつけると便利。

export PATH="$PATH:$HOME/go/bin"
alias go="go1.21.4"

Go では後方互換性が保証されているので複数の Go を入れる動機は無さそうだが、プロジェクトで使う Go のバージョンが決まっている場合にうっかり新しい機能を入れたくない場合にやっぱり複数の Go があると便利だと思う。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0