Go の開発環境は IntelliJ IDEA + golang plugin がマトモだった

**情報が古いので注意ください。golang pluginは現在1.0.0のalpha版が出ており、限界がありますがリファクタリング、ブレークポイントともに対応しています。**

**TL;DR IntelliJ IDEA + golang plugin は現時点で一番マトモだと思いました。**

Go のエディタ、今まで Sublime Text 3 の GoSublime でやってきていたのですが、どうもしっくりこない…
趣旨が違うのはわかるのですが、Sublime Text 3 の project の扱いがどうも慣れませんでした。

IDE 厨らしく素直に IDE を使おうと思い立ち、探してみると IntelliJ IDEA には golang plugin あるみたいですね。

導入にあたり少し嵌りどころがありましたので共有まで。

### 1.IntelliJ IDEA 入れてなかったらインストールする

お値段が高いことで有名な IntelliJ IDEA ですが今は無料エディションがあります。良い時代ですね。

http://www.jetbrains.com/idea/download/

から Community Edition をダウンロードします。

### 2.golang plugin を入れる

IntelliJ IDEA -> Preferences -> Plugins 

に行き、 "golang" と入れて、下記プラグインを入れます

![スクリーンショット 2014-09-14 22.27.40.png](https://qiita-image-store.s3.amazonaws.com/0/19168/481a9560-4dd4-150a-d243-df7872c028a9.png)

Go SDK の場所を聞かれますが、普通にやれば大丈夫です。(以下 `/usr/local/go` であることを前提に話を進めます)

### 3.`GOPATH` と `GOROOT` で嵌るので fix する

`GOPATH` と `GOROOT` を如何にちゃんと設定していようが、何故か認識してくれないので、下記ページを参考に環境変数を設定し直します。

https://github.com/go-lang-plugin-org/go-lang-idea-plugin/blob/master/Missing%20ENV.md

```
launchctl setenv GOROOT /usr/local/go
launchctl setenv GOPATH ~/Goprojects 
```

`~/Goprojects` は各自 `GOPATH` を突っ込んでください。

これで IntelliJ 起動時に GOPATH ないとかで怒られなくなります。

### 4.`import` が上手く動かないので fix する

`GOPATH` をきちんと設定していても `import` が上手く動きません。
import path を上手く認識してくれてないようですね。

多少強引ですが Source path に自前でぶちこみます。

1. Project tree の External Libraries を右クリックし、Open Library Settings を選択します。
2. 設定項目に Classpath, Sourcepath とありますので, Sourcepath を開きます
3. Sourcepath に `$GOPATH/src` と `$GOPATH/pkg/darwin_amd64` (Mac の場合) にあたるディレクトリを追加します。追加は下にある + ボタンで。

![スクリーンショット 2014-09-14 22.34.12.png](https://qiita-image-store.s3.amazonaws.com/0/19168/b3035be6-2eca-c83e-03a0-922578140893.png)

以上によりキチンと動くようになります。

機能紹介
---

### オンタイムの Syntax check

このへんがエディタとは違うところです。
エディタとは違うんだよ！エディタとは！（スミマセン）

![スクリーンショット 2014-09-14 22.47.20.png](https://qiita-image-store.s3.amazonaws.com/0/19168/4259cac0-df76-2b28-b519-06f48e1cdbf9.png)

##### Go 特有の warning も

使ってない変数はもちろん怒られます。黄色とかじゃなくて赤いのが潔い。

![スクリーンショット 2014-09-14 22.48.30.png](https://qiita-image-store.s3.amazonaws.com/0/19168/d54bb6c5-59b9-2a10-60bb-1cee9c479565.png)

##### 受けてない返り値のチェック

まともな開発環境という感じです。

![スクリーンショット 2014-09-14 23.17.16.png](https://qiita-image-store.s3.amazonaws.com/0/19168/a9e983cb-6606-76d2-693c-c939808114a3.png)

##### 型チェック

最高

![スクリーンショット 2014-09-14 23.18.17.png](https://qiita-image-store.s3.amazonaws.com/0/19168/370d8c56-b87d-adf5-68c2-5e019b5b1de8.png)

### `import` の補完

![スクリーンショット 2014-09-14 22.37.03.png](https://qiita-image-store.s3.amazonaws.com/0/19168/0f30557b-266b-fe13-46b5-06d83e86a963.png)

### 自動 `import`

Alt + Enter で `import` してない package を import してくれます

![スクリーンショット 2014-09-14 22.53.40.png](https://qiita-image-store.s3.amazonaws.com/0/19168/64446f54-6fec-7f52-597f-9eb1c02dfaed.png)

### メソッド補完

当たり前ですがメソッド補完があります。GoSublime にもあるみたいですが何故か動きませんでした。

![スクリーンショット 2014-09-14 22.39.56.png](https://qiita-image-store.s3.amazonaws.com/0/19168/57824b58-c43a-899d-fc5b-538f4a2d6c07.png)

### リファクタリング(ない)

Not implemented yet!!!!!

![スクリーンショット 2014-09-14 22.42.04.png](https://qiita-image-store.s3.amazonaws.com/0/19168/2b3bfb9c-a9ff-2f53-eb9e-2ffe5d4e1ead.png)

### Breakpoints (ない)

アッハイ

![スクリーンショット 2014-09-14 22.57.50.png](https://qiita-image-store.s3.amazonaws.com/0/19168/efcfd8aa-a5af-5349-c769-a7f1bbab3237.png)

### `gofmt`

保存時に自動でしてくれたりはしません（GoSublime はしてくれた）

![スクリーンショット 2014-09-14 22.43.27.png](https://qiita-image-store.s3.amazonaws.com/0/19168/02f6f058-1b18-5158-2f26-3fd326f89da7.png)

### Alt + Enter

IntelliJ 様の Alt + Enter の恩恵を享受することが出来ます

![スクリーンショット 2014-09-14 22.45.08.png](https://qiita-image-store.s3.amazonaws.com/0/19168/5e89f63a-e55a-5fb5-f20d-ef5a2457b7b9.png)

ちなみに自動で return type を string にしてくれたりはしませんでした。

まとめ
---

個人的な感想です。

GoSublime よりは遥かにマシです。マトモに開発出来る環境という感じがします。
Refactoring が未実装であったり、ブレークポイントとか色々足りてないのは多少感じますが…

まあでも、静的解析ちゃんとオンタイムでやってくれるのは、安心感違いますね。

端的に、現時点での Go が扱える開発環境としては一番マトモです。
Xcode とか Android Studio とか RubyMine とか PyCharm とか、あるいは IntelliJ IDEA 自身を使ってきた方は、最も抵抗が少ない開発環境ではないかと思います。

References
---

- Setting up the Google Go plugin with IntelliJ IDEA 13 on OS X 10.8.5 - Pivotal Labs : http://pivotallabs.com/setting-google-go-plugin-intellij-idea-13-os-x-10-8-5/
- go-lang-idea-plugin/Missing ENV.md at master · go-lang-plugin-org/go-lang-idea-plugin : https://github.com/go-lang-plugin-org/go-lang-idea-plugin/blob/master/Missing%20ENV.md