bauer's diary

凡人の凡人による凡人のための備忘録

Goのことはじめ その1:GOPATHとghqのルート指定

はじめに

業務でGoを触ることになったので、Goに関して気になったことをまとめていこうと思います。

GOPATH

GOPATHはGoで使う環境変数なのですが、2つの役割があります。

  1. ビルド時のインポートパスのルート(正確には$GOPATH/src配下)
  2. go getコマンドで外部パッケージをインストールしたときの、ダウンロードルートディレクト

詳細は公式ドキュメントに記載されています。
How to Write Go Code - The Go Programming Language

ghq

id:motemen さん作の、Go製のリポジトリ管理ツールです。
github.com

$ ghq get (GitHubの)ユーザ名/リポジトリ名

とすると、ローカルの "~/.ghq" というディレクトリにデフォルトでインストールされます。
"ユーザ名/リポジトリ名"の部分ですが、GitHub以外、例えばbitbucketは"https://ユーザ名@bitbucket.org/…"のように一から指定する必要があります。

Goにはgetコマンドがあるので、事足りるような気もするのですが、他にもクローンされたリポジトリを一覧したり、指定したローカルのリポジトリにcdできるので、重宝しています。

GOPATHとghqのルートをどこに設定するか

「GOPATHは適当に決めて問題ない」という記事もありましたが、個人的には適当に決めてあとで地雷を踏みたくないのが性分です。
例えば".ghq"の下にgetしたけど、やっぱりこのライブラリをインポートしたいから"go/src"の下に入れたい…となったときにシンボリックリンクを貼るのか、同じものをgo getするのかなど、色々困りそうです。

それを踏まえて、自分はこのようにしようと思います。

$GOPATH
export GOPATH=~/go
.gitconfig
[ghq]
  root = ~/.ghq
  root = ~/go/src

Go 言語のソースだけは go get で 取得し "$GOPATH/src" 以下に
そうでないものは ghq get で "~/.ghq" 以下に取得するようにしています。

  • go getした結果は "$GOPATH/src" に配置される
  • ghq getしたものも同じディレクトリに配置させるため


今回はここまでです。
次回はGoのバージョン管理システム選定について書きたいと思います。