Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
280
Help us understand the problem. What is going on with this article?
@yuku_t

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
280
Help us understand the problem. What is going on with this article?
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
yuku_t
FLYWHEEL社でソフトウェアエンジニアをしています。昔はIncrements社最初の従業員としてQiitaを開発したりCTOやったりしていました。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
280
Help us understand the problem. What is going on with this article?