🐷

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

2022/02/01に公開約2,500字

普段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

ログインするとコメントできます