どうも、たかふみです。
少し前から会社の同期と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