1. はじめに
anyenv経由でインストールしたgoenvですが
どうにもGOPATHやGOROOTの設定が動いてくれませんでした。
(結果としてGOPATH設定変更しなくて良かったようですが)
GoのWebフレームワーク echoを導入するときに、インストール先がGOPATHが設定されているディレクトリだったので「なんかそこじゃ嫌だな〜」と思って、GOPATH設定変更を試みました。
そのときに行ったことを備忘録として書きます。
Homebrew、anyenv、goenvのインストール手順は書いていません。
お気付きのことがあれば、コメントいただけると幸いです。
2. 環境
macOS Mojave ver. 10.14.6
Homebrew インストール済
go version go1.13.5 darwin/amd64
shell: bash
3. 最終的な解決策
$ vi ~/.bash_profile
を開いて以下追記。
// GOPATHの管理を無効にする
GOENV_DISABLE_GOPATH=1
これに加えてGOPATHに関するすべての記述を削除して、保存。
bash_profileで環境変数設定したらパスを通して、ターミナル再起動。
$ source ~/.bash_profile
// シェルの再起動
$ exec $SHELL
再度GOPATHの設定を見てみたら、スッキリしていました。
$ go env GOPATH
/Users/XXXX/go
4. 解決策に至るまで
まずGOPATHがどこに向いているのか確認。
$ go env GOPATH
/Users/XXXX/.anyenv/envs/goenv/shims/go
もしくは、GOROOTなどGoに関するすべての情報を見たければ
// Go環境の情報一覧
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
¦
GOPATH="/Users/XXXX/.anyenv/envs/goenv/shims/go"
¦
「え、このディレクトリにecho入れるとかやだ」と思ったので
bash_profile開いて変更
// bash_profile開く
$ vi ~/.bash_profile
そしたら
export PATH="$HOME/.anyenv/bin:$PATH
eval "$(anyenv init -)"
export GOPATH=$HOME/go
export PATH=$GOPATH/bin:$PATH
いろいろ自分で書いててよく分からん\(^o^)/ ←
本来ならばひとつずつ削除して
GOPATHがどこに設定されるのか調べていくのが筋なのでしょうが
goenvのGitHubに環境変数設定に関して記述があったので
これを使ってみることにしました。
環境変数 | デフォルト | 説明 |
---|---|---|
GOENV_VERSION | 使用するGoのバージョンを固定する。$ goenv help shell で詳細確認 |
|
GOENV_ROOT | ~/.goenv | Goバージョンとshimsがあるディレクトリ以下に定義する。$ goenv root で現在の設定表示 |
GOENV_DEBUG | デバック情報の表示。$ goenv --debug <subcommand> でも表示可。 |
|
GOENV_HOOK_PATH | goenv hooksを検索するためのコロン区切りのパス一覧 | |
GOENV_DIR | $PWD | .go-versionファイルを検索するためのディレクトリ |
GOENV_DISABLE_GOROOT | 0 | GOROOTの管理を無効にする。エクスポートしたGOROOTを設定したければ、1を設定 |
GOENV_DISABLE_GOPATH | 0 | GOPATHの管理を無効にする。エクスポートしたGOPATHを設定したければ、1を設定。複数のGoバージョンを使用している場合、それらのバージョンの混合を防止するため、0を設定することが推奨される。詳細:https://github.com/syndbg/goenv/issues/72#issuecomment-478011438
|
GOENV_GOPATH_PREFIX | $HOME/go | GOENV_DISABLE_GOPATH=1を設定していない場合、GOPATH prefixがエクスポートされる。例えば Go 1.12.0 を使用しているなら、$HOME/go/1.12.0 が設定される。 |
5. GOPATHやGOROOTの設定って…
goenvのインストール手順を熟読すると、ちゃんと書いてありました。
以下の順番で環境変数設定してあげることが正しいようです。
anyenv経由だと勝手が違うと思いますが…
export GOENV_ROOT="$HOME/.goenv"
export PATH="$GOENV_ROOT/bin:$PATH"
eval "$(goenv init -)"
export PATH="$GOROOT/bin:$PATH"
export PATH="$PATH:$GOPATH/bin"
goenvを使えばディレクトリ毎にバージョン管理ができますし、
もちろんアプリ毎にもこれは適用できて便利ですよね。
最初はこの設定でやってみて、開発を進めていく中で
必要に応じて変更していけば、各所に影響与えずに済みそうです。
また気づきなどあれば追記します。