LoginSignup
5
3

More than 3 years have passed since last update.

【Go】GOPATH変更できないときにやったこと

Last updated at Posted at 2020-01-10

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を使えばディレクトリ毎にバージョン管理ができますし、
もちろんアプリ毎にもこれは適用できて便利ですよね。
最初はこの設定でやってみて、開発を進めていく中で
必要に応じて変更していけば、各所に影響与えずに済みそうです。

また気づきなどあれば追記します。

6. 参考資料

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3