Help us understand the problem. What is going on with this article?

GOPATH は適当に決めて問題ない

More than 1 year has passed since last update.

TL;DR

  • go get は Ruby でいう gem みたいなもん
  • $GOPATH は自分の環境に合わせて好きに指定してよい
    • 例えば $HOME/.go とか $HOME/go とか
  • 好きに設定してもいいけど、一度設定したらそれをずっと使い続けた方がたぶんいい

現在では、GOPATHを明示的に設定しない場合は自動的に設定される。
Wikiより

If no GOPATH is set, it is assumed to be $HOME/go on Unix systems and %USERPROFILE%\go on Windows.

ことの始まり

homebrewでGoをインストールしたらのっけから

Go 1.1 から go get コマンドは $GOROOT をパッケージダウンロード先として使わなくなりなりました。
go get 使うには $GOPATH が必要です。

と言われて、間違った設定をしてあとで苦労したくなかったので色々と調べた。

go get コマンド

% go help get

使い方: go get [-d] [-fix] [-u] [build flags] [packages]

パッケージ(依存するものも)をダウンロードしてインストールする。

-d フラグがあるとダウンロードだけでインストールしない。
-fix フラグは fix tool をダウンロードしたパッケージの依存関係を解消する前に実行する。(詳しくは godoc fix を見れば分かるらしい。)
-u フラグがあるとパッケージとその依存パッケージをアップデートする。

build flagsは go buildgo install のフラグを指定する。

パッケージを確認するとき get はローカルにインストールされている Go のバージョンと適合するブランチやタグを探す。最も重要なルールは、ローカルで走っているのが "go1" だったとすると、 get は "go1" という名前のブランチとタグを探すということ。もしそういうバージョンが無かったら、最新のものを取ってくる。

パッケージの指定の仕方については go help packages を見る。

どうやってソースコードを見つけるかは go help remote を見る。

GOPATH

% go help gopath

Goパスは import 文の解決に使われる。go/build パッケージで実装されている。

環境変数 GOPATH は Go コードを探す場所を表す。(PATH みたいな感じ)
Unix の場合はコロンで区切る。
Windows の場合はセミコロンで区切る。
Plan 9だとリスト。

GOPATH は標準の Go の外でパッケージをビルドしたりインストールする際に設定されていなければならない。

GOPATH に入っているディレクトリはそれぞれ決められた構造を持っていなければならない:

(詳しくは割愛)

例:

GOPATH=/home/user/gocode

/home/user/gocode/
    src/
        foo/
            bar/               (go code in package bar)
                x.go
            quux/              (go code in package main)
                y.go
    bin/
        quux                   (installed command)
    pkg/
        linux_amd64/
            foo/
                bar.a          (installed package object)

Go は GOPATH の各ディレクトリからソースコードを探すが、ダウンロードしたファイルは常に GOPATH の中で一番最初のディレクトリにインストールされる。

結局どうすればいいのか

GOPATH は決まった場所を指定するものではなく、自分の環境で好きな場所を勝手に指定すればよい、という性質のものらしい。つまり、正しい場所を指定しておかないと Go が使えないとかそういった性質のものではない(それを恐れていた)、と。

インターネットを観測した感じだと

  • $HOME/go
  • $HOME/.go

あたりを設定している人が多い印象。設定は .bashrc.zshrc で行う。

~/.bashrc
export GOPATH=$HOME/.go
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした