Goの開発環境 Eclipse+GoClipse（Mac OS X）

Goの開発環境を構築したときの手順をまとめておきます。
今回は、以下の環境を利用しています。

* MacOS X 10.10.2
* Go 1.4.2
* Eclipse 4.4 (Eclipse IDE for Java EE Developers)
* GoClipse 0.9.1

#Goのインストール・設定
Homebrewでインストールします。

```bash
$ brew install go
```

正常にインストールできたか、バージョンを確認します。

```bash
$ go version
go version go1.4.2 darwin/amd64
```

#環境変数の設定
Goを利用する上では、以下の環境変数を設定します。

* GOROOT
 * Goのインストールディレクトリです。Goを自分でビルドした場合は設定が不要、など、いろいろとポリシーがあるようですが、ここでは素直にインストールディレクトリを指定します。Homebrewでインストールすると "/usr/local/opt/go/libexec/" になります。
* GOPATH
 * ユーザ自身のワーキングディレクトリになります。"go install"したときのパッケージのインストール先になります。"go get"でリモートパッケージを取得する場合も、この配下にパッケージが配置されるようです。

ここでは、設定は .bash_profile に以下のように記述しておくことにします。

```bash
export GOROOT=/usr/local/opt/go/libexec
export GOPATH=$HOME/go/golocal
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
```

#GoGlipse のインストール・設定
前提として、JDK、Eclipse自体は、インストールされているものとします。

##GoGlipseのインストール
以下のUpdateSiteから、最新版をダウンロードしてインストールします（Eclipse Marcketplace で公開されているのが、なぜか古いままなので）。

* http://goclipse.github.io/releases/

![goclipse-install.png](https://qiita-image-store.s3.amazonaws.com/0/22893/6c24b91d-e55c-c1a2-0284-81e0a40f96b3.png)

GoClipseのインストールが完了したら、Eclipseのメニューから"環境設定 -> Go"と進み、以下の設定を行います。

![goclipse-setting.png](https://qiita-image-store.s3.amazonaws.com/0/22893/6825b4fa-6de6-5ebd-00db-a84ec46f8a4f.png)

* GOROOT
 * 環境設定で指定した"/usr/local/opt/go/libexec"を指定します。
* GOPATH
 * ここでは空で設定しておきます。環境設定で指定した値を指定したら、パスがEclipseのプロジェクトのパス配下になってしまい、うまく動作しないみたいです。

##Goスクリプトの作成・実行

Eclipseのメニューから、"Go Project" を選択して、プロジェクトを作成します。
プロジェクトを作成すると、自動的に以下の階層が作成されます。Go標準のディレクトリ構成になります。

```
<project>
├─bin
├─pkg
└─src
```

src配下に、Goスクリプトを作成します。

```go:src/hello/hello.go
package main

import "fmt"

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

このスクリプトを実行して、コンソールに"Hello world!"と出力されればOKですね。

![go-helloworld.png](https://qiita-image-store.s3.amazonaws.com/0/22893/ac00b7d3-7f5f-5e60-3b93-b10d4899610f.png)



もし、コンパイルエラーにはなっていないのに、実行時に、"go install: no install location for directory"というエラーが発生する場合は、Goスクリプトの配置パスが問題です。
srcディレクトリ直下にGoスクリプトを配置していると、上記のエラーが発生します。

これで、実装自体は可能になります。
gofmtなども適用されるので、自動フォーマットもされます。言語標準で、フォーマッタが備わっているのは便利ですね。

#デバッグ環境の設定
Go単体では、デバッグができません。
ブレイクポイントをしかけても、ストップせずに通過してしまいます。

##GDBのインストール

Goの場合、GDBを利用して、デバッグを行います。この辺りは、ちょっと手間ですね。

Macでは、デフォルトではGDBはインストールされていないので、Homebrewでインストールを行います。

```bash
$ brew install homebrew/dupes/gdb
```

##セキュリティの設定
Macの場合、GDBをインストールしただけだと、セキュリティ上の制限で、利用できません。
証明書の設定が必要になるのですが、以下のサイトを参考にさせて頂きました。

* [MacでGoのデバッグ環境を構築する](http://safx-dev.blogspot.jp/2014/04/macgo.html)
* [MacのIntelliJ IDEA でGO言語を使う③　~GDBを使ってみる~](http://qiita.com/puttyo_bubu/items/a8476e4422259d75f449)
* [Mac OS X 10.9 MavericksでgdbでGoのコードをデバッグする](http://qiita.com/ymotongpoo/items/81d3c945483cae734122)

##Eclipseの設定
GDBの設定は、GoClipseの設定ではなく、C/C++の設定になります。
"環境設定 -> C/C++ -> Debug -> GDB"と進み、GDBの設定を行います。

![go-gdb.png](https://qiita-image-store.s3.amazonaws.com/0/22893/49e27018-ed05-1e2b-9b15-a4d1bbcfa22e.png)

"GDB debugger"の設定だけが必要になりますが、Homebrewでインストールした場合は、"/usr/local/bin/gdb"になります。
これで、Goをデバッグするための環境が整いました。

##デバッグの実行
早速、デバッグをしてみます。

![go-debug.png](https://qiita-image-store.s3.amazonaws.com/0/22893/4b3a8e4d-0303-0318-e894-ae1d2f649e24.png)

ブレイクポイントを仕掛けてみると、指定した箇所でストップし、右上の"Variables"タブの部分に、変数の内容が出ていますね！

無事、実装からデバッグを行うGoの開発環境が整いました。