Goを複数バージョンインストールする
はじめに
これまでは、バックエンドの開発でgo1.17系を使っていましたが、別アプリケーションの開発をすることになりました。 そちらのアプリケーションではgo1.18で作成されていたため、最初の環境構築時にGoのバージョン違いによりエラーが発生しました。 今後もこれまで関わっていたアプリケーションの開発を行う可能性もあるため、複数Goバージョンでの開発が必要になり実施することにしました。
結論
複数バージョンのインストールする、というタイトルとは矛盾しますが、 下記にあるように、Go言語は後方互換性を保っているため、 特別な理由が無い場合は複数バージョン持たずに最新版をインストールしておけば問題ありません。 セキュリティ面や不具合等によっては互換性が保てない場合も出てくる可能性はありますが、これまでのところ出てはいないようです。
インストーラでインストール
現在のバージョンをアンインストール後、ダウンロードページにて最新版を取得してイストールしましょう。 アンインストールは下記のように直接ディレクトリを削除することで完了します。
rm -rf /usr/local/go
brewでインストール
# 最新版にアップグレード brew upgrade go
バージョンを指定する場合
# アンインストール brew remove go # バージョンを指定してインストール brew install go@1.18
とはいえ
テストコードが十分ではないアプリケーションのバージョンを気軽に上げるのはやはり抵抗はありますよね? また、ベータバージョンのGoで搭載される新機能を試してみたい場合、 ローカルのバージョン上げてしまうと、プロダクトの開発で使用しているバージョンと異なってしまうため、業務に支障をきたします。 ということで、複数バージョンをインストールできる方法を知っておくと便利です。
バージョンが異なることでどんなエラーが発生するか
複数バージョンのインストール方法の前に、バージョンが合わない場合に、どのようなエラーが表示されるかを示しておきます。
go mod tidy
エラーが出て実行できません。
go mod tidy go mod tidy: go.mod file indicates go 1.18, but maximum supported version is 1.17
go mod vendor
特にエラー発生せず。vendorディレクトリが作成されます。
go run
こちらも特にエラー発生せず。アプリケーションも動作しました。
go test
注意は出ますが、一応テストは実行可能。※下記「note:」の部分 上位バージョン特有の書き方が実行ファイルに存在する場合はエラーになるかもしれません。
go test ./... 〜〜 中略 〜〜 note: module requires Go 1.18 ? app/path [no test files] ? app/path/one [no test files] ok app/path/two 0.532s
複数バージョンのインストール
他のプログラム言語では、複数バージョン管理するために○○env的なパッケージを用いるのが多いです。 Goにもgoenvなるものがありますが、公式で提示されている方法がありますので、そちらで実施していきます。
下記のコマンドでの[バージョン]の部分を好きなバージョンに変えて実行すればOKです。
$ go install golang.org/dl/go[バージョン]@latest $ go[バージョン] download
インストール可能なバージョンについては、ダウンロードページを確認することで、存在するバージョン番号を知ることができます。
現時点の最新版はgo1.19.1、1.18系の最新版は、go1.18.6となっています。 go1.18の場合は下記のコマンドになります。
go install golang.org/dl/go1.18.6@latest go1.18.6 download # バージョン確認 go1.18.6 verion go version go1.18.6 darwin/amd64
続けてgo1.17もインストールしてみます。 go1.17の最新版は1.17.13なので下記のコマンドです。
go install golang.org/dl/go1.17.13@latest go1.17.13 download # バージョン確認 go1.17.13 version go version go1.17.13 darwin/amd64
ということで複数バージョンのGoをインストールすることができました。
使い方
各バージョンのGoを実行するには、goの後ろにインストールしたバージョンを付けてコマンドを実行することになります。
go1.18.6 verion go1.18.6 env GOROOT go1.18.6 run main.go ...etc
アンインストール
ダウンロードしたバージョンをアンインストールするには、 GOROOT環境変数で指定されたディレクトリを削除するだけです。
インストールしたGoはインストーラでインストールした場合と異なり$HOME/sdk 配下に保存されています。
Goのアンインストール
goのインストール先の確認
go1.18.6 env GOROOT
ディレクトリ削除
rm -rf $(go1.18.6 env GOROOT)
/etc/paths.d/goを削除する
rm -rf /etc/paths.d/go
おまけ
Go 2.0が登場すると今回の記事の内容がより活用できる場が増えるかもしれません。 Goは2月と8月にマイナーバージョンが上がりますので、 予定通りであればGo 1.20は、2023年2月のリリースとなります。
下記の記事ではGo 1.20がGo 2.0となるような内容にも読めるため、 来年Go 2.0がリリースされるかもしれませんね。