📑

Goで複数のバージョンを利用する(goenv不使用)

2023/07/18に公開

ローカル環境のgoをバージョンを管理する必要がある場合にgoenvを使っていませんか?
anyenv系が便利だと脳に染み付いていたので僕も最初は使っていましたが、本家で出来るならと思って乗り換えてみました。

前提条件

% sw_vers                                                                                                                                                                                                                                                                [main]
ProductName:	macOS
ProductVersion:	11.4
BuildVersion:	20F71

% brew --version                                                                                                                                                                                                                                                         [main]
Homebrew 4.0.23
Homebrew/homebrew-core (git revision 2c206559b9d; last commit 2023-02-20)
Homebrew/homebrew-cask (git revision 75526d18ed; last commit 2023-02-20)

% which go                                                                                                                                                                                                                                                               [main]
/opt/homebrew/bin/go

% go version                                                                                                                                                                                                                                                             [main]
go version go1.19.2 darwin/arm64

方法

使用できるバージョンの一覧

ここから指定するバージョンを選ぶことができます。
https://go.dev/dl/

ローカル環境の手順

## すでにgoenvを使っている場合、念の為リネーム
## 不要なことが確認できたらディレクトリごと掃除(brewで入れてる人はuninstall)
% mv ~/.goenv ~/.goenv_bk

## (ここでは例として)go1.18.7のインストール
## 使用できるバージョンの一覧から、ほしいバージョンを選択して読み替える
% go install golang.org/dl/go1.18.7@latest
% go1.18.7 download

## Golandを使用している場合、これで確認した内容をGolandのプロジェクト上のGOROOTに設定
% go1.18.7 env GOROOT

.zshrcなどの設定

# goenvの設定をコメントアウトか削除しておく
#export GOENV_ROOT="$HOME/.goenv"
#export PATH="$GOENV_ROOT/bin:$PATH"
#eval "$(goenv init -)"

# ローカルgoの設定
export GOPATH=$HOME/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

これでgo{インストールしたバージョン}コマンドで利用できるようになります。
go コマンドにオーバーライドできないのはちょっと面倒ですが、切り替え不要で利用できる点は複数プロジェクトを触る場合に便利ですね。

メリット

  • バージョンの切り替えを行わなくても同時に別バージョンを利用できる
    • goenvも.go-versionが置かれているプロジェクトは特に意識する必要はない
  • 新バージョンの提供が早い

デメリット

  • CLI利用時の読み替えが面倒

参考

https://go.dev/doc/manage-install

Discussion