Golang開発環境構築 in MAC

(*うまくいかないので継続監視中)
OS: OSX Yosemite 10.10.4
Darwin Kernel Version 14.4.0

#1. VSCodeの利用
https://code.visualstudio.com/
からOSX用をダウンロードしてApplicationフォルダにコピーして起動します。

#2. GO拡張のインストール
[GO拡張](https://code.visualstudio.com/docs/editor/extension-gallery?pub=lukehoban&ext=GO)もこちらを見ながら入れます。
[こちら](https://marketplace.visualstudio.com/items?itemName=lukehoban.Go)も参考に。
(F1を押すとテキスト入力が画面上部に表示されるので、extensionと入力して、InstallExtentionを選択。
ext installと表示されるのでgoと入れるとGoExtentionが選択可能になる。)

#3. settings.json
![スクリーンショット 2016-02-21 21.46.04.png](https://qiita-image-store.s3.amazonaws.com/0/89997/9ade1864-574a-0716-fda6-f881f8a56fe4.png)
進んでいるといつの間にか、.vscodeというディレクトリができていて、その中にlaunch.jsonとtasks.jsonが作成されています。
新規にsettings.jsonを作成して下記コードをコピペして保存します。
＊１"go.goroot"はwhereした結果で書き換えます。
＊２"go.gopath"はecho #GOPATHした結果で書き換えます。
＊３エディタを再起動しましょう。

```
{
    "go.buildOnSave": true,
    "go.lintOnSave": true,
    "go.vetOnSave": true,
    "go.buildFlags": [],
    "go.lintFlags": [],
    "go.vetFlags": [],
    "go.useCodeSnippetsOnFunctionSuggest": false,
    "go.formatOnSave": false,
    "go.formatTool": "goreturns",
    "go.goroot": "/usr/local/go",
    "go.gopath": "/Users/murotanimari/work"
}
```

F1を押すと下記のように使えるコマンドが増えています。
![スクリーンショット 2016-02-21 21.53.01.png](https://qiita-image-store.s3.amazonaws.com/0/89997/d7076d60-78b6-6706-fe67-470f8a0b6332.png)
#4. delveのインストール
OSX用には自己証明の作成が必要みたいです。
[delve](https://github.com/derekparker/delve/wiki/Building)

## 4.1 証明書作成
1.キーチェーンアクセスを開く
2.キーチェーンアクセス>証明書アシスタント>証明書作成
名前:dlv-cert
固有名のタイプ:自己署名ルート
証明書のタイプ:コード署名
デフォルト無効化をチェック
3.続ける
4.有効期間を任意に変更
5.続けてください。
6.証明書の場所を指定
キーチェーン: システム
(もしエラーになる場合にはloginキーチェーンに格納してexportしてください。その後Systemキーチェーンに格納できます。)
![スクリーンショット 2016-02-21 22.07.37.png](https://qiita-image-store.s3.amazonaws.com/0/89997/1995b5d6-a247-f794-0f8a-810d907d5e54.png)
7.公開/秘密鍵アクセス制御変更
(Yosemite以降は)右クリック>情報を見る>アクセス制御
この項目を仕様を全てのアプリケーションに許可へ変更保存
8.再起動
1.キーチェーンアクセスを閉じる
2.taskgatedをkillするかOS再起動

## 4.2. delveのmake
*1 taskgatedをkillします

*2 makeの引数として先ほど作成した証明書を指定します。

```
cd ~/work/src/github.com/derekparker
git clone https://github.com/derekparker/delve.git
cd delve
sudo su
GO15VENDOREXPERIMENT=1 CERT=dlv-cert make install
```

##4.3. デバッガ動作確認
delvコマンドがちゃんと動くか確認します。
パスなどの設定が間違っていて動かない場合には適宜修正します。

```
cd $GOPATH
cd src/github.com/derekparker/delve/cmd/dlv
$GOPATH/bin/dlv debug main.go
```

![スクリーンショット 2016-02-27 14.08.27.png](https://qiita-image-store.s3.amazonaws.com/0/89997/d9b5ed66-31b4-67a3-2fb2-9db9f660820c.png)

Rootでないと動かない場合に下記のようなエラーが出ます。

```
[murotanimari]$ $GOPATH/bin/dlv debug main.go
could not launch process: could not fork/exec
```

#5. launch.jsonの設定
一旦VSCを再起動してlaunch.jsonを作成します。

```json:launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch",
            "type": "go",
            "request": "launch",
            "mode": "debug",
            "program": "${workspaceRoot}",
            "env": {},
            "args": []
        }
    ]
}
```

#6. デバックExtensionのビルドと追加
~/.vscode/extensionsに移動し何もないことを確認します。

```
rm -rf ~/.vscode/extensions/lukehoban.Go
cd ~
git clone https://github.com/Microsoft/vscode-go
cd vscode-go
npm install
```

他のツールもインストールします。

```
go get -u -v github.com/nsf/gocode
go get -u -v github.com/rogpeppe/godef
go get -u -v github.com/golang/lint/golint
go get -u -v github.com/lukehoban/go-find-references
go get -u -v github.com/lukehoban/go-outline
go get -u -v sourcegraph.com/sqs/goreturns
go get -u -v golang.org/x/tools/cmd/gorename
go get -u -v github.com/tpng/gopkgs
go get -u -v github.com/newhook/go-symbols
```

#7. VSCで起動
root以外のユーザーで起動するのでエラーが出てしまいます・・・・。
sudoでVSCを起動しても起動時には関係ないみたいです・・・。

```
VSCODE_CWD="$PWD" sudo open -n -b "com.microsoft.VSCode" --args $* ;
```

![スクリーンショット 2016-02-27 16.38.53.png](https://qiita-image-store.s3.amazonaws.com/0/89997/0b2e07dd-ecd7-c425-52bc-71287cf55509.png)