質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.37%

  • Go

    590questions

    Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

【Go】結局、$GOPATHと$GOROOTはどこに設定すればいいの?

解決済

回答 2

投稿

  • 評価
  • クリップ 2
  • VIEW 18K+

shtr_t

score 355

Goを勉強し始めようとしています。

そこでGoのインストールまでは行けたのですが、書籍やWebのリファレンスサイトによってGOPATHとGOROOTの指定がまちまちだなと感じました。

GOPATHはどこでもいいというリファレンスもあれば、$HOME/Work/goに指定すべき、などといった書籍もあり、結局どこに設定するのが一般的なのかがわかりません。

また状況によってはGOROOTも指定しなければならないというリファレンスもみかけます。

結局、どれになにを設定するのが正解なのでしょうか?
正解がなかったとしても一般的な設定はどれなのでしょうか?
GOPATH、GOROOTを設定することによってどんな影響があるのでしょうか・・・?

今Goを動かそうとしている環境がLubuntuのため、Linuxの場合の設定方法を聞きたいです。

おこがましいことですがbashなどの前提知識がないので、そのへんを考慮して回答いただけたら、と思います。

※皆さんからの率直な意見を聞きたいのでここでは調べたリファレンスや書籍はあえて明記しないでおこうと思います。

以上、よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+5

$GOROOTについてですが、これを設定すべきな場面は非常に限られます。詳しくはこのリンクを参照していただきたいのですが、簡単に言えばaptとかgvmみたいなバージョンマネージャとかを使ってインストールしたのであれば設定する必要はないはずです。
$GOROOT$GOOS$GOARCHなどの環境変数の役割についてもさきほどのリンクで触れられています)


次に$GOPATHについて。これは少し事情が複雑になります。

まず$GOPATHの役割なのですが、Go言語でパッケージをimportしたりするときの解決先や、go getgo installをしたときのパッケージやバイナリのインストール先を決定すること等に使われます。
$GOPATHの役割についてはこの文章が分かりやすいです:https://github.com/astaxie/build-web-application-with-golang/blob/master/ja/01.2.md
なので$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

でインストールできるはずです。使い方についてはさきほどのリンクを参考にしてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/07/26 15:40

    ありがとうございます、一番詳しく解説されていたので今回ベストアンサーとさせていただきます。

    キャンセル

+2

$GOROOTの設定は不要です。
必要になる場合などは、以下を見ていただければよいかと思います。

参考: 【Go × Vim】 VimでGoを書く - 2015 Spring - Qiita

また、$GOPATHについてですが、これは本当にどこでもいいです。
私も気になったことがあり、GitHub などを見て独自調査した結果、以下が多かったです。 (ちなみに私は2番派です)

  1. $HOME/go
  2. $HOME/.go

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/07/26 15:41

    回答ありがとう御座います。
    しかしながらベストアンサーは一個しか選べないため一旦閉じるためにベストアンサーを設定しました。
    ご丁寧な回答ありがとうございました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Go

    590questions

    Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。