【環境変数】go getでパッケージがインストールされるディレクトリは$GOPATH/bin。設定していない場合は$HOME/go/binに入る。


どうも、たかふみです。
少し前から会社の同期とGoでLINEBotの開発を行なっています。

開発で使うライブラリをインストールするため、go getをした後、コマンドを実行したのですがwire: not foundと表示されてしまいました。

go getでインストールしたものってどこにインストールされるんだっけ?」ということで、今回はgo getによるインストール先や$GOPATHについて調べた内容をまとめておきたいと思います!

■結論

$GOPATHを設定していなければ$HOME/binにインストールされる。
go getでインストールされたライブラリは$GOPATH/binにインストールされる。

go get github.com/google/wire/cmd/wireを実行

DIライブラリ「wire」をインストールするためにgo getを実行。wireコマンドを実行したところ下記のように表示。

/go/src/github.com/go-server-dev # wire
ash: wire: not found

パスが通っていないのが原因と考えました。そこで出たのがgo getでインストールしたものってどこにインストールされるんだろう」という疑問。

echo $GOPATHで確認

調べてみると$GOPATH/binにインストールされることが分かったので、echoで$GOPATHを確認。

echo $GOPATH

何も出ませんでした。確かに設定した覚えはありません。

■そもそも$GOPATHとは何か

The GOPATH environment variable specifies the location of your workspace.
引用:https://github.com/golang/go/wiki/SettingGOPATH

$GOPATHとはワークスペースの場所とのこと。また、go help gopathより、go getでインストールしたパッケージについては$GOPATHで設定されたディレクトリにインストールされるとありました。

そうなると、$GOPATHを設定していない僕の環境ではどこへインストールされているのでしょうか。。。

■設定していない場合は$HOME/goにインストールされる

githubのwikiに書いてありました。

If no GOPATH is set, it is assumed to be $HOME/go on Unix systems and %USERPROFILE%\go on Windows.
https://github.com/golang/go/wiki/SettingGOPATH

設定していない場合は$HOME/goと見なされるようです。
確認したところ、今回インストールしたパッケージ「wire」が$HOME/go/binに入っていることを確認しました。

/go/src/github.com/go-server-dev # echo $HOME
/root
/go/src/github.com/go-server-dev # ls /root/go/
bin  pkg  src
/go/src/github.com/go-server-dev # ls /root/go/bin/
wire

$GOPATHを設定しておく

きちんと$GOPATHを設定しておきます。

/go/src/github.com/go-server-dev # vim ~/.bash_profile

↓vimで記述
---
export GOPATH=$HOME/go
---

/go/src/github.com/go-server-dev # source ~/.bash_profile
/go/src/github.com/go-server-dev # echo $GOPATH
/root/go

echo $GOPATHで設定したパスが表示されることが確認できました。

まとめ:$GOPATHは明示的に設定しておいた方が良さそう

go getでインストールされる場所を把握するためにも、開発に入る前に$GOPATHは設定しておいた方が良さそうです。設定していない場合は$HOME/goにインストールされることをお忘れなく!

それでは!

参照

SettingGOPATH
https://github.com/golang/go/wiki/SettingGOPATH

GOPATH は適当に決めて問題ない
https://qiita.com/yuku_t/items/c7ab1b1519825cc2c06f

GOPATHの設定とgo get
http://kodama-tech.hatenablog.com/entry/2016/12/14/002115

[備忘録]Go言語のGOPATHやパッケージについて
https://qiita.com/chano2/items/ea76cc503e651f07bfb0