目次
初心者はgoenvは使わないほうが良いかもしれない?
最近またGoを少しずつ触っている。
そんな中、下記のポストを読んでいたら、あまりgoenv
などのマルチバージョン管理ツールはおすすめではないようなことが書かれていた。
なるほど、たしかに現在goenv越しに利用していると、下記のようにversionごとのディレクトリを参照するようになっている。
$ go env GOPATH /Users/username/go/1.17.3
このようになっている場合、バージョンを切り替えた場合に新たに依存をダウンロードし直すことになってしまうし、コード補完の支援などで利用されるlanguage serverにGOPATHの設定を再度行う必要が出てくるようだ
以前M1 MacBook Airでgoenvを使ってGo環境を設定してみたが、Go初心者の私はおとなしくまずはバージョン管理を使わずに試してみることに決めた。
(なお、一応書いておくと、決してgoenv自体が悪いということではなく、Goの仕組みを理解していないままgoenvのようなバージョン管理ツールを使うのはおすすめしない、ということだと思います。)
goenvをuninstallする
というわけで goenv
をアンインストールしていきます。
公式にやり方が書かれているので、そちらを参照していきます。
https://github.com/syndbg/goenv/blob/master/INSTALL.md#uninstalling-goenv
goenvを一時的に無効にしたり、アンインストールするのはとても簡単なようで、単にgoenvを無効にする場合はシェルの起動設定からgoenv init
の行を削除、もしくはコメントアウトするだけで完結するようだ。
この場合、goenvに対してコマンドラインからアクセスは可能だが、Goアプリ自体はバージョン切り替えに関する影響は受けなくなり、システムのGoバージョンが実行されるようになるらしい。
試しに上の記述を試してみてたが(goenv initの行をコメントアウト)、そもそもシステムにGoを入れていなかったからか、特に挙動が変わることはなかった。
次にgoenv自体をアンイストールする方法だが、
- goenvを無効化する方法でも書いたが、
goenv init
に関する行を削除する - 次に
goenv
のルートディレクトリを削除する
goenvのルートディレクトリの確認方法については下記で行える。
$ goenv root /Users/username/.goenv
実際に削除する際のコマンドは下記となる。
rm -rf `goenv root` # rm -rf /Users/username/.goenv と同じ
これでgoenv
コマンドは利用できなくなる。
$ goenv --version goenv:11: command not found: goenv
goenvの遺産をすべて削除する
ちなみにこれだけで goenv
のアンインストールは完了するのだが、例えば goenv
越しの go
を使って go get
をしている場合、$GOPATH/{versions}
配下にインストールしたものが残っていたりする。
私の場合 ~/go/1.17.3
配下にある感じ。
そのため私は一応こちらも削除することにした。
(別に残しておいても問題はないだろうが、一応きれいにしておきたかったのだ)
rm -rf ~/go/1.17.3
これで goenv
に関する遺産はたぶんすべて削除したことになる。
Goをインストールする
一番オーソドックスなやり方でインストールすることにする。
下記の公式サイトのダウンロードページからインストール。
M1 MacにGoをインストールするときの注意点
M1 Macでアクセスした場合、たぶん下記のような表記になっていると思うが、ここでこのままこのパッケージをダウンロードすると、これはintel版だったりする。
M1(arm)版は下記のリンクをクリックした先にある。
すると下記のような画面になるので、下記画像の赤枠内にあるものをダウンロードする。
(ひとまず私はインストーラー版をダウンロードしています)
あとはダウンロードしたインストーラーを実行していくだけ。
インストールが完了し、シェルを再起動すると、下記のようにインストールしたGoコマンドが有効化されていました。
$ go version go version go1.17.3 darwin/arm64
GOPATH
の設定も完了している。
$ go env GOPATH /Users/username/go
これでひとまず公式サイトからのGoのインストールは完了しました。
[余談] go fmtの挙動が変わった!?
余談ですが、go fmtの挙動がどこかのタイミングで変わりましたか?
久しぶりにGoに触れている。自身の環境だとgo fmtをしたときのインデントが2スペース分のハードタブになっているけど、まえはもっとインデントの幅があった気がする。どこかで挙動が変わったのかな? #Go言語
— Yuki Shindo (@shinshin86) November 20, 2021
もしご存じの方がいましたらコメントくださいm( )m
挙動が変わったという記述はぱっと検索しただけでは見つからなかったのですが、以前はもっとインデント幅があったはず。。。割と気になっている事柄。