Goの環境構築方法を調べていて気づいたこと
普段 Ruby やら TypeScript を書いているんですが、最近 Go に興味が出てきました。
Go の環境構築はほとんどやることないのでとても楽だったんですが、調べると割と不要なことをしている記事が結構あったので参考までに調べて気づいたことを共有したいなと思います。
バージョン管理ツール(goenv など)いらない
Ruby
ならrbenv
, Node.js
ならnodenv
を使っている自分からすると、
Go
でもバージョン管理ツール必要なのかなと思って調べたら結論いらなかった。
「go 環境構築」で検索するとgoenv
入れてる記事が大量にあって自分も 1 回入れたので気をつけてください笑
現状 Go は後方互換性が保たれてるのが理由。
なので躊躇わずどんどんバージョンアップして大丈夫っぽい! めっちゃありがたい。
仮に複数のバージョンを入れたい場合も公式でその方法が示されてるので、その通りに行えば良さそうです。
Go の開発メンバーの人のブログでもいらないって言ってる。
ちなみに goenv の作者の方はだいぶ前のツイートでほとんど使ってないって言ってる w
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 などで環境変数の設定をする必要がなくなります。
GOROOT
もGOPATH
もデフォルト値から変更する必要性がないため、それぞれ設定はいらないということです。
GOROOT
は Go の SDK の場所を定義しています。
複数のバージョンを使用するなどがない限りはまず設定を変更する必要はない。
次にGOPATH
は、ワークスペースの場所を定義しています。インストールしたパッケージなどは全てここに保管されます。
Mac なら$HOME/go
に自分で設定してなくても勝手に設定されてるはず。(Go1.8 以降)
❯ go env GOPATH
/Users/username/go
調べてみるとどうやら昔(Go1.11 以前)は$GOPATH/src
配下でしか開発できなかったらしい。
その後Go modules
の導入により$GOPATH/src
にプロジェクトを置かなければならないという制約からは解放されたので、各プロジェクト毎に GOPATH を指定するみたいなことがいらなくなったという経緯のようです。
なので、こちらも現在はデフォルトから変える必要性はないです。
まとめ
Go の環境構築はインストールするだけで終了でした笑
Mac ならこれだけ!
brew install go
Discussion