ちゃなんログ

書き散らします。マラソンがしたいです。

goenv2系でのGOPATHの取り扱い

最近goを触ってるのですが、環境構築にgoenvを用いました
その際にGOPATHの取り扱いでハマったのでメモがてら

goenvのインストール

$ git clone https://github.com/syndbg/goenv.git ~/.goenv

上記のようにbrewではなくgit cloneを使ってインストールをすると

$ goenv -v
goenv 2.0.0beta9

goenv2系がインストールされます
goenvに対する理解が乏しかったので何の疑いもなく、このままGOPATHの設定を行いました

GOPATHの設定とハマり

export GOPATH=$HOME/Documents/platform
export PATH=$GOPATH/bin:$PATH

上記のようにGOPATHを任意のディレクトリに設定しようとしますが

$ go env
GOPATH="/Users/yuma.minami/go/1.10.3"

GOPATHの変更が反映されず
Home/go/version
が設定されています

goenv2系からはgoenvがGOROOTとGOPATHの管理・変更をするようになったのが原因でした

Changed goenv’s bootstrap (eval $(goenv init -)) now to call goenv-sh-rehash --only-manage-paths. This means that it’ll export and manage GOROOT and GOPATH env vars. It does not attempt to manage when version is system. ; Ref: https://github.com/syndbg/goenv/pull/70

Changed goenv-exec now to set GOPATH and GOROOT environment variables before executing specified cmd and args. Can be disable via GOENV_DISABLE_GOPATH=1 and GOENV_DISABLE_GOROOT=1. GOPATH can be configured with GOENV_GOPATH_PREFIX. E.g GOENV_GOPATH_PREFIX=/tmp/goenv. Default managed GOPATH is $HOME/go. ; Ref:

回避方法

GOENV_DISABLE_GOPATH=1

上記をbashrcなどに設定しておけばgoenvによるGOPATHの管理を無効化できます

まとめ

めっちゃ単純ですがハマってしまいました
goの勉強会に行った際にはgoenvなどのツールを用いて環境構築するのはあまり推奨されていないと言われました
理由としてはやはりツール独自の仕様に依存してしまうことが大きいようです