開発環境でGoを複数バージョンインストールしてみる
こんにちは。レスキューナウでバックエンドエンジニアをしている土岐です。
現在、私のチームではバックエンドに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 version
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がリリースされるかもしれませんね。
最後に
現在、レスキューナウでは、災害情報の提供、災害情報を活用した安否確認サービスなどのWebサービスの開発エンジニアを募集しています!
社員・フリーランスに関わらず、参画後に安心してご活躍できることを目指し、応募された方の特性・ご希望にマッチしたチームをご紹介します。
ちょっと話を聞いてみたい、ぜひ応募したい、など、当社にご興味を持っていただけましたら、お気軽にエントリーください!!