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