目次
はじめに
仮想マシン上のCentOS7.6にGolang用の開発環境を構築する方法をまとめます。Golangのバージョンが、1.12になりデフォルト設定や、新しい依存関係管理システムが利用できるようになりパッケージの扱いが楽になったはずだけど、古いライブラリなどが環境変数のGOPATHを参照している場合は、環境変数としてGOPATHを設定する必要があります。
2019.12.26:OSやツールのバージョンが上がったので、新しい環境で検証を行いました。
環境
- Vagrant 2.2.6
- Virtualbox 6.0.14
- CentOS 7.6 (centos/7 virtualbox, 1905.01)
利用したVagrantfile
# vim: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "centos/7"
config.vm.box_version = "1905.01"
config.vm.network "private_network", ip:"192.168.200.1"
config.vm.provider "virtualbox" do |vb|
vb.memory = 4096 # 4GiB
end
end
手順
ダウンロード
Golang公式サイトのダウンロードページで最新バージョンを確認してアーカイブをダウンロードする。
(2019/12/26時点の最新は1.13.5なので「go1.13.5.linux-amd64.tar.gz」)
$ curl -O https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 114M 100 114M 0 0 53.1M 0 0:00:02 0:00:02 --:--:-- 53.1M
インストールしてパスを通す
ビルド済みのファイルがアーカイブされているので、展開してパスを通す。
$ sudo tar -C /usr/local -xf go1.13.5.linux-amd64.tar.gz
$ echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bash_profile
go getで必要になるコマンドをインストール
go getは各リポジトリから直接ファイルを取得するので、それぞれに対応したコマンドが必要なります。
目的のライブラリやコマンドのリポジトリがgithub.comでも依存しているライブラリがgithub.com以外の場合があるので、git、hg、svnあたりを使えるように以下のパッケージをインストールします。
$ sudo yum install -y git mercurial subversion
go getでインストールしたコマンドのためのパスを通す
$ echo 'export PATH=$PATH:$(go env GOPATH)/bin' >> ~/.bash_profile
環境変数GOPATHを設定する(任意)
「go get」で追加されるコマンドなどがデフォルトのGOPATHではなく、環境変数のGOPATHを参照している場合などに設定する必要があります。
$ echo 'export GOPATH=$(go env GOPATH)' >> ~/.bash_profile
作業ディレクトリを作成する(任意)
下記はgithub.comを利用してソースファイルを管理する例です。
[username]には自分のgithub上のusernameを、[repository name]には作成するリポジトリの名前を設定します。
新しい依存関係管理システム[Go Modules](https://blog.golang.org/using-go-modules)のおかげで「$GOPATH」以外の場所が指定できるようになりました。自作のパッケージを作成するなら後から変更するより「$GOPATH」以下へ作成した方がよさそうです。
# 最初の一回だけ必要
$ mkdir -p `go env GOPATH`/{src,bin,pkg}
# 新しく作成するたびに必要
$ mkdir -p `go env GOPATH`/[username]/[repository name]
備考
環境変数GOROOTについて
実行ファイルに埋め込まれた、GOROOTの場所以外にインストールした場合に設定が必要となる。
(Golangでの標準は「/usr/local」だけど提供パッケージにより異なる)
今回ダウンロードしたアーカイブの場合は、標準通りなので環境変数GOROOTは設定しません。
# 埋め込み値の確認
$ go env | grep GOROOT
GOROOT="/usr/local/go"
環境変数GOPATHについて
環境変数GOROOTのように実行ファイルに埋め込まれている値があり、環境変数GOPATHを設定せずにgo get
を行うとデフォルトの「$HOME/go」以下にパッケージやgo製のコマンドがインストールされます。
# 埋め込み値の確認(Vagrantで作成した仮想マシンでの結果)
$ go env | grep GOPATH
GOPATH="/home/vagrant/go"
まとめ
以前調べた時よりCentOSとGolangのバージョンが、だいぶ上がったので直近の環境で再確認しました。
epelリポジトリからインストールできるバージョンは1.13.3で、公式サイトの最新バージョンは1.13.5なので、差はあまり無いけど、公式から実行可能なコンパイル済みのバイナリを含むアーカイブファイルとして配布されているので、敢えてyumを使う必要がない気がします。