質問: Goを勉強し始めようとしています。 そこでGoのインストールまでは行けたのですが、書籍やWebのリファレンスサイトによってGOPATHとGOROOTの指定がまちまちだなと感じました。 GOPATHはどこでもいいというリファレンスもあれば、$HOME/Work/goに指定すべき、などといった書籍もあり、結局どこに設定するのが一般的なのかがわかりません。 また状況によってはGOROOTも指定しなければならないというリファレンスもみかけます。 結局、どれになにを設定するのが正解なのでしょうか? 正解がなかったとしても一般的な設定はどれなのでしょうか? GOPATH、GOROOTを設定することによってどんな影響があるのでしょうか・・・? 今Goを動かそうとしている環境がLubuntuのため、Linuxの場合の設定方法を聞きたいです。 おこがましいことですがbashなどの前提知識がないので、そのへんを考慮して回答いただけたら、と思います。 ※皆さんからの率直な意見を聞きたいのでここでは調べたリファレンスや書籍はあえて明記しないでおこうと思います。 以上、よろしくお願いいたします。
回答: `$GOROOT`についてですが、これを設定すべきな場面は非常に限られます。詳しくはこのリンクを参照していただきたいのですが、簡単に言えば`apt`とか`gvm`みたいなバージョンマネージャとかを使ってインストールしたのであれば設定する必要はないはずです。 (`$GOROOT`や`$GOOS`、`$GOARCH`などの環境変数の役割についてもさきほどのリンクで触れられています) 次に`$GOPATH`について。これは少し事情が複雑になります。 まず`$GOPATH`の役割なのですが、Go言語でパッケージを`import`したりするときの解決先や、`go get`や`go install`をしたときのパッケージやバイナリのインストール先を決定すること等に使われます。 (`$GOPATH`の役割についてはこの文章が分かりやすいです:) なので`$PATH`に`$GOPATH/bin`を追加しなければいけません。 しかし、この場所をどこにしなければいけない、ということは特に定められていません。適当にそれっぽい名前のディレクトリにしてしまって問題ないです。(参考:GOPATH は適当に決めて問題ない - Qiita) ただし、このようにするとグローバルにインストールされたパッケージとプロジェクト毎のパッケージが混在してしまい問題になります。 昔はプロジェクト毎に`$GOPATH`を分けるなどして対処していたのですが、最近は(Go1.5になって)venderという機能が追加されある程度解決されました。 詳しい説明はこのリンクに譲りますが、glideというツールを使うといいと思います。 なにやらごちゃごちゃしてしまったのでまとめます。 * `$GOROOT`は設定しなくてもよい(恐らくは) * `$GOPATH`は適当に決めた一箇所に設定する。 * `$PATH`に`$GOPATH/bin`を追加する。 * vendering管理ツールとしてglideを使う。 そして設定方法ですが、`$HOME`ディレクトリ直下にある`.bashrc`というファイル(隠しファイルになっています)に以下の内容を追記してください。 ``` # ここでは仮にGOPATHを~/goということにします(別に他の場所でも構いません) export GOPATH="$HOME/go" export PATH="$GOPATH/bin:$PATH" ``` そしてglideのインストール方法と使い方ですが、端末を起動して、 ``` $ curl https://glide.sh/get | sh ``` でインストールできるはずです。使い方についてはさきほどのリンクを参考にしてください。