VS Codeでdelveによるgo言語のデバッグ設定をする(mac)

前提として、[home brew](https://brew.sh/index_ja) と [golang](https://golang.org/doc/install) がインストールされていること

```
brew install go
go version
```


#1. GOPATHを通す
```shell
export GOPATH=/Users/username/go
export PATH=$GOPATH/bin:$PATH
source ~/.bash_profile
```
#####<解説>
ターミナルを開き、上から順に実行。

・GOPATHという環境変数に `/Users/username/go` を代入

・PATHという環境変数に `$GOPATH/bin` を代入。※実質 `/Users/username/go/bin` という文字列に
　※`$PATH`は terminalで`echo $PATH`とした時に設定されている環境変数
　　例：`PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin`
　　のPATHで、そのPATHに追加するよってこと
　※`$GOPATH/bin:$PATH`と書けば、上記の例で言うと
　　`/Users/username/go/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin`
　　と追加され、逆に
　　`$PATH:$GOPATH/bin`と書けば、
　　`/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/username/go/bin:`
　　と追加される。
　※コマンド検索される時に、PATHに書かれている左から検索されるので、よく使うコマンドのbinのパスは左に書いておくと良い

・`source`というLinuxコマンドを打って、ファイルの変更内容を起動中のターミナルに反映させる。
　※sourceコマンドを打たないと、その変更が反映されないので、ターミナルから抜けて再起動する必要がある。
　※変更したのにあれ?と思ったら、一回ターミナルを抜けて再起動なんか試すと良い


#2. GoプラグインをVS Codeにインストール
・VS Code用のGoプラグインを入れる
　VisualStudio | Marketplace: [Go for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=golang.Go)


#3. Goプラグインに必要な各種ツールをVS Codeにインストール
・VS Codeでコマンドパレットを開く　`Command + Shift + p `
・`>Go: Install/Update Tools`と入力する
・表示されるツールから任意のツールにチェックを入れてOKボタンを押す。
　※大体以下のようなツールが出てくる

| tools |
|:-:|
| gocode |
| gopkgs |
| go-outline |
| go-symbols |
| guru |
| gorename |
| gotests |
| gomodifytags |
| impl |
| fillstruct |
| goplay |
| godoctor |
| **dlv** |
| gocode-gomod |
| godef |
| golint |

※dlvがdelveにあたるツールで、デバッグに必要

・`dlv version`コマンドでdelveのバージョンを確認。
　※ちゃんとバージョンが確認されれば、パスも通っているし、ダウンロードされたことを確認できる

#4. デバッグのセットアップとして、launch.jsonを作成する
・VS CodeのRUNコンソール画面に移動
　※左のデバッグ矢印ボタン`[▷]`を押すとそれがRUNコンソール
・`To customize Run and Debug create a launch.json file`の<font color="blue">create~.json</font>をクリック
・VS Code中央上部に `Select Environment` と表示されるので、 `Go Dlv (Experimental)` を選択
　※選択後に `.vscode/launch.json` ファイルが生成される

#5. launch.jsonの編集
・デフォルトでは、typeフィールドが `"type": "godlvdap"` となっているので、`"type": "go"` に書き換える

※以下、参考までに、

```
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Debug",
            "type": "go",
            "request": "launch",
            "mode": "debug",
            "program": "${workspaceFolder}/src",
            "env": {
                "PORT":00000,
                "LOG_LEVEL":"debug",
                "AWS_ACCESS_KEY_ID":"XXXXX",
                "AWS_SECRET_ACCESS_KEY":"YYYY",
                "AWS_DEFAULT_REGION":"ap-northeast-1",
                "S3_BUCKET_USERS":"username.sandbox.users",
                "JwtExpiration":60
            },
            // "args": []
        }
    ]
}

``` 
#####<解説>
・`name`は、VS Code側で表記するrunボタンのデバッガ名
・`type`は、Goなど言語の指定を書く
・`program`は`.vscode/launch.json`が置かれている該当のディレクトリパスを指定
・`env`に環境変数の引数を持たせることも可能。PORTを指定したり、AWSのKEYとかも設定できる

指定できる属性：[debugging#_launchjson-attributes](https://code.visualstudio.com/docs/editor/debugging#_launchjson-attributes)

#6. VS Codeでデバッグポイントを起き、run/debugを実行する
・プログラムを止めたい該当箇所に、デバッグポイントを起き、実行。止まることを確認。



#7. これでデバッグができる

うれしみ

以上、
ありがとうございました。