🐷

Goの環境構築方法を調べていて気づいたこと

2022/02/01に公開

普段 Ruby やら TypeScript を書いているんですが、最近 Go に興味が出てきました。
Go の環境構築はほとんどやることないのでとても楽だったんですが、調べると割と不要なことをしている記事が結構あったので参考までに調べて気づいたことを共有したいなと思います。

バージョン管理ツール(goenv など)いらない

Rubyならrbenv, Node.jsならnodenvを使っている自分からすると、
Goでもバージョン管理ツール必要なのかなと思って調べたら結論いらなかった。

「go 環境構築」で検索するとgoenv入れてる記事が大量にあって自分も 1 回入れたので気をつけてください笑

現状 Go は後方互換性が保たれてるのが理由。
なので躊躇わずどんどんバージョンアップして大丈夫っぽい! めっちゃありがたい。

仮に複数のバージョンを入れたい場合も公式でその方法が示されてるので、その通りに行えば良さそうです。
https://go.dev/doc/manage-install?s=09#installing-multiple

Go の開発メンバーの人のブログでもいらないって言ってる。
https://eli.thegreenplace.net/2020/you-dont-need-virtualenv-in-go/

ちなみに goenv の作者の方はだいぶ前のツイートでほとんど使ってないって言ってる w
https://twitter.com/ymotongpoo/status/941171911509155840

GOROOT も GOPATH も設定いらない

まず Go をインストールしたら、go envコマンドを打ってみると環境変数が色々出てきます。

❯ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/username/Library/Caches/go-build"
GOENV="/Users/username/Library/Application Support/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/username/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/username/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/Cellar/go/1.17.6/libexec"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/Cellar/go/1.17.6/libexec/pkg/tool/darwin_amd64"
GOVCS=""
GOVERSION="go1.17.6"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/dev/null"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -arch x86_64 -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/c2/3d0xk2y915d8bj34ptmsm55m0000gn/T/go-build2061201860=/tmp/go-build -gno-record-gcc-switches -fno-common"

これらの環境変数は OS 上で設定することで上書きすることもできますが、OS 上で設定しなければ Go 内で使える環境変数になります。
なのでデフォルト値からの変更が必要なければ、新しく zsh などで環境変数の設定をする必要がなくなります。
GOROOTGOPATHもデフォルト値から変更する必要性がないため、それぞれ設定はいらないということです。

GOROOTは Go の SDK の場所を定義しています。
複数のバージョンを使用するなどがない限りはまず設定を変更する必要はない。

次にGOPATHは、ワークスペースの場所を定義しています。インストールしたパッケージなどは全てここに保管されます。
https://go.dev/doc/gopath_code#GOPATH

Mac なら$HOME/goに自分で設定してなくても勝手に設定されてるはず。(Go1.8 以降)

❯ go env GOPATH
/Users/username/go

https://github.com/golang/go/wiki/SettingGOPATH#unix-systems

調べてみるとどうやら昔(Go1.11 以前)は$GOPATH/src配下でしか開発できなかったらしい。
その後Go modulesの導入により$GOPATH/srcにプロジェクトを置かなければならないという制約からは解放されたので、各プロジェクト毎に GOPATH を指定するみたいなことがいらなくなったという経緯のようです。
なので、こちらも現在はデフォルトから変える必要性はないです。

まとめ

Go の環境構築はインストールするだけで終了でした笑
Mac ならこれだけ!

brew install go

Discussion