Go

Go言語の開発環境セットアップ

More than 1 year has passed since last update.

※このドキュメントは、Go速習会で、事前にGolangを動かせる環境を用意してもらうために書いたものです。

ここでやること

  • Goのインストール
  • GOPATHの設定
  • エディタ(Atom)の設定
  • とりあえず"Hello world!"が出来るか確認
  • もっと準備したい人のための情報

Goのインストール

https://golang.org/doc/install

に各OS用のインストール方法がまとまってます。

Macなら、Homebrewを使い、

brew install go

でいけます。

GOPATHの設定

Goを使うためには、GOPATHを設定する必要があります。ほぼ必須です。
ここにimportする外部のライブラリが入りますし、僕はこのGOPATH以下で開発しています。

GOPATH以下のディレクトリ構成

GOPATHをどこにするか決める上でも、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)

https://golang.org/cmd/go/#hdr-GOPATH_environment_variable

GOPATHは何処がいいか

大きく以下2つの選択肢があり、それぞれメリット・デメリットあります。

  1. ルートディレクトリ GOPATH=~
  2. home以下のgoディレクトリ GOPATH=~/go
    • ディレクトリ名としては、go, .go, gocode が主流

これからはじめる人は、既存のディレクトリ構造の移行とか諸々面倒だと思うので、2でgoでやることをオススメします。
gocodeは本家の例でいくつか使われていますが、個人的には長い必要がないと思います。.goは自分のコードの開発をこのディレクトリ以下でやらない派の人にはいいかもしれません。

ちなみに、自分はパソコンを買い変えたタイミングで1の設定で運用しています。
そうすると自分がいじるすべての言語のコードを置く場所が~/src/github.com/<ユーザー名>/<レポジトリ名>になるので迷いがなくなるし、
レポジトリを移動するコマンドcrや、go以外のコードもgo getの用に取ってくるコマンドghqを使うことで全言語のソースコード管理が楽になります。
デメリットとして、goimportsが遅くなりますが、まぁgofmtがあるし、goimportsあんまり使わないという手があるのであまり困っていないです。

環境変数への設定方法

.bash_profile, .zshenv

.bash_profile
export GOPATH=/Users/your-user-name/go  # GOPATHにすると決めた場所
export PATH=$GOPATH/bin:$PATH

と設定します。

エディタの設定 - Atom

ここでは、Atomでやる場合を解説します。
go-plus のパッケージを入れましょう。以下の機能がまとめて入ります。

  • コード補完 (gocode)
  • コード整形 (goformats, goimports)
  • 静的エラー解析 (golint, go vet)
  • ビルドとテスト (go build, go test)

go-plus.png

あとは、Settingsに行って、GOPATHとか必要な設定をすると良いです。
これだけで基本は十分なはずです。

簡単なコードが動くか確認

どこかのディレクトリにmain.goを作って、

main.go
package main

import "fmt"

func main() {
    fmt.Println("Hello world!")
}

と書いて保存します。

$ go run main.go
Hello world!

と出力されればOKです。

おまけ

公式サイトでの導入

普通、公式のドキュメントを読んでGoをはじめようと思ったら以下のドキュメントを読むはずです。
ここで書いたことや、テストをどう書くかまでまとまっているので目を通しておくと良いかもしれません。

How to write go code (日本語訳)

基本文法を知るには

速習会では、APIサーバーを作るのをゴールにするため、基本的な文法(if文や、ループの仕方や構造体どう作るのか等)は使ったタイミングで軽く触れる以上のことはしないつもりです。
これを知るには、以下のTour of Goというのがその場で実行できるSandbox付きでめちゃくちゃ良いので、"Basics"の部分までで良いので事前に見ておくことをおすすめします。ただやるのは必須ではないです。

https://tour.golang.org/list

他に知っておくと便利なツール

  • godep
    • 依存解決ツール。依存するライブラリを自分ディレクトリ以下に取ってくる
    • goでは主流、と言うか必須になってきている
  • ghq
    • 便利なgo getghq getコマンドとして提供