GolangのインストールとPATHの設定

スポンサーリンク

Golang のインストールと PATH の設定について最新の情報でまとめました。

Goのインストール

バイナリインストール

公式サイトからバイナリをダウンロードして展開します。パッケージインストーラでインストールする場合は.pkgのファイルをダウンロードしてください。

$ curl -O https://storage.googleapis.com/golang/go1.8.darwin-amd64.tar.gz
$ tar -C /usr/local/src -xzf go1.8.darwin-amd64.tar.gz

Getting Started - The Go Programming Language
Downloads - The Go Programming Language

Go バイナリは/usr/local/goにインストールされることを想定しているため、上記のように別の場所にインストールするとGOROOTの設定が必要です。$GOROOT/binへの PATH も通しておきましょう。

$ /usr/local/src/go/bin/go version
go: cannot find GOROOT directory: /usr/local/go
$ echo 'export GOROOT="/usr/local/src/go"' >> ~/.bash_profile
$ echo 'export PATH="$GOROOT/bin:$PATH"' >> ~/.bash_profile
$ exec $SHELL -l
$ go env GOROOT
/usr/local/src/go
$ echo $GOROOT
/usr/local/src/go
$ go version
go version go1.8 darwin/amd64

アンインストールする場合は Go のディレクトリを削除するだけです。

goenvを使用してインストール

おなじみの env シリーズですが goenv はいくつか種類があるので Homebrew でインストールできるものを使用します。

$ brew install goenv
$ goenv -v
goenv 1.0.0
$ brew info goenv
goenv: stable 1.0.0, HEAD
Go version management
https://github.com/syndbg/goenv
/usr/local/Cellar/goenv/1.0.0 (123 files, 228.0KB) *
  Built from source on 2017-04-01 at 16:22:33
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/goenv.rb
$ echo 'eval "$(goenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l

Go をインストールします。Tab で補完がきくのでインストールできるバージョンを確認します。インストールできたらgoenv globalで使用するバージョンを指定してください

$ goenv install 1.8.0
$ goenv global 1.8.0
$ goenv version
1.8.0 (set by /Users/tasukujp/.goenv/version)
$ go version
go version go1.8 darwin/amd64

goenv を使用した場合GOROOTgoコマンドを実行した時に自動的に設定されます。

$ go env GOROOT
/Users/tasukujp/.goenv/versions/1.8.0

GitHub - syndbg/goenv: Like pyenv and rbenv, but for Go.

Homebrewでインストール

Homebrew でも簡単にインストールすることができます。古いバージョンの Go も対応しています。

$ brew install go
$ brew install go@1.7
$ brew install go@1.6

GOPATH環境変数の設定

GOPATHは Go を開発する作業ディレクトリになります。1.8からはデフォルトでgoコマンド実行時に$HOME/goが GOPATH にセットされます。1.7以前のバージョンを使用する場合は必ず設定する必要があることに注意しましょう。また、1.8を使用する場合であっても環境変数を上書きすれば別の場所を GOPATH として使うこともできます。Go をインストールしたGOROOTを指定してはいけません。

$ go version
go version go1.8 darwin/amd64
$ go env GOPATH
/Users/tasukujp/go
...
$ go version
go version go1.7.5 darwin/amd64
$ go env GOPATH
                    # ←設定されない

GOPATHを指定しないでgo getすると以下のメッセージが表示されて実行できませんね。

$ go get github.com/Masterminds/glide
package github.com/Masterminds/glide: cannot download, $GOPATH not set. For more details see: go help gopath

GOPATH 配下にはgo getでインストールしたパッケージ ( RubyのGemみたいなイメージ ) も格納されるため、パッケージのコマンドを実行できるように$GOPATH/binにも PATH を通しておきましょう。

$ echo 'export GOPATH="$HOME/.go"'  >> ~/.bash_profile
$ echo 'export GOPATH="$GOPATH/bin:$PATH"'  >> ~/.bash_profile
$ exec $SHELL -l
$ go env GOPATH
/Users/tasukujp/.go

プロジェクト毎にディレクトリを分けたい場合は direnv を使うといいかもしれません。

プロジェクト毎に必要なパッケージはパッケージ管理ツールを使用して ( RubyでいうBundler ) 共通的に使うパッケージはgo getでそのまま GOPATH 配下にインストールしていくのがよさそうです。

試しにパッケージ管理ツールのglideとクロスコンパイル用のgoxをインストールしてみましょう。

$ go get github.com/Masterminds/glide
$ go get github.com/mitchellh/gox
$ glide -v
glide version 0.13.0-dev

インストールされたGOPATHのディレクトリは以下のような構成になっています。

$ tree ~/.go/ -L 3
/Users/tasukujp/.go/
├── bin
│   ├── glide
│   └── gox
├── pkg
│   └── darwin_amd64
│       └── github.com
└── src
    └── github.com
        ├── Masterminds
        └── mitchellh

HelloWorld

最後にお約束の HelloWorld です。hello/hello.goに次のコードを記述します。

package main

import "fmt"

func main() {
    fmt.Printf("hello, world\n")
}

go runコマンドでファイルを指定して実行して下さい。go buildをディレクトリ内で実行すると実行可能なバイナリファイルが作成されます。

$ go run hello.go
hello, world
$ go build
$ ls
hello       hello.go
$ ./hello
hello, world

公式には日本語訳されたサイトもありますが情報が最新ではなかったりするのでなるべく公式ドキュメントを見たほうがよさそうです。

The Go Programming Language (公式)

The Go Programming Language (日本語版)