VSCodeでGo言語の開発環境を構築

# はじめに
船井総研デジタルのoswです。業務でGo言語を使うことになったため、勉強がてら備忘録で記録します。参考になる方がいらっしゃれば幸いです。

# 対象読者
- Go言語をこれから勉強する方
- VSCodeを使おうと考えている

# 今回使う環境
今回は下記を土台にGoの開発環境を構築します。

- Windows 11 Home / 22H2
- VSCode / 1.72.2

# 環境構築
環境構築はGitのインストールを除き、マイクロソフトの下記記事を参考に次の流れで行います。

1. Gitのインストール
1. Goのインストール
1. VSCodeのインストール
1. 拡張機能のインストール
1. Goツールを更新する

https://learn.microsoft.com/ja-jp/azure/developer/go/configure-visual-studio-code

## Gitのインストール
内部でGitを使うことがあるようで、必ずGitが必要という訳ではないようですがインストールすることが推奨されているようです。

https://qiita.com/toshibe/items/dcf3dd48fdc74c91b409

## Goのインストール
下記、Go公式ページから「Download Go for Windows」を選択し、ダウンロード、インストールします。

https://go.dev/doc/install

次に Windowsキー + R -> cmd[Enter] でコマンドプロンプトを起動し、次のコマンドでGoがインストールされたか確認します。レスポンスでバージョンが返れば成功です。

```powershell:インストールの確認
>go version
go version go1.19.2 windows/amd64
```

## VSCodeのインストール
手元にまだインストールされていない方は次の記事を参考にインストールしてください。

https://qiita.com/tsujiyoshifumi/items/5e619e883abbc1bbc4be

## 拡張機能のインストール
### VSCodeを日本語化する
インストールしたばかりのVSCodeはUIが日本語ではないため、日本語化する場合は下記画像のように「japanese」で検索し、言語パックをインストールし、VSCodeを再起動します。
![VSCodeの日本語化.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820803/de2b4431-ceb6-5198-d06d-8590db4d893a.png)

### Goの拡張機能をインストール
「Go」で拡張機能を検索し、画像と同じものをインストールします。
![Go拡張機能のインストール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820803/921207af-921c-525a-c916-fe36af5b61d9.png)

## Goツールを更新する
Goの拡張機能をインストール後、Ctrl + Shift + P でコマンドパレットを開き、`Go: Install/Update tools`を検索、実行します。
![Goツール更新コマンド.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820803/ba2b8bfd-f0d9-0309-061c-fad821712b2f.png)

次に表示されるリストをすべて選択し、「OK」を押下します。
![Goツール更新リスト.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820803/95d84511-9876-e5f9-992c-fc5750fbd036.png)

これで環境構築は完了です。

# Hello World
構築した環境でお馴染みのHello Worldを実行してみます。

今後、学習した内容ごとにディレクトリをぶら下げていきたいので、下記のようにgoディレクトリを作成し、その中に各ディレクトリをぶら下げるようにしました。VSCodeで「hello」ディレクトリを開きます。
```shell:フォルダ階層
go
└─hello
　 └─hello.go
```

<br>

VSCode上でターミナル（コマンドプロンプト）を起動、カレントディレクトリがhelloであることを確認し、下記を実行します。
```shell:プロジェクトを初期化
>go mod init hello

# go.modが作成される。VSCodeでデバッガーを使うためにもこの作業が必要な様子
>ls
go.mod
```

<br>

hello.goを次のように作成します。
```go:hello.go
package main

import "fmt"

func main() {
	name := "World"
	fmt.Println("Hello", name)
}
```

<br>

VSCode上で\[F5\]キー押下でデバッグが走り、下記のように「Hello World」と結果が表示されます。

```shell:実行結果
Starting: C:\Users\<ユーザ名>\go\bin\dlv.exe dap --check-go-version=false --listen=127.0.0.1:58443 from r:\work\go\hello
DAP server listening at: 127.0.0.1:58443
Type 'dlv help' for list of commands.
Hello World
Process 18416 has exited with status 0
Detaching
dlv dap (17676) exited with code: 0
```

<br>

ここでgo.modが作成されていないとエラーになります。
```shell:エラー
Starting: C:\Users\<ユーザ名>\go\bin\dlv.exe dap --check-go-version=false --listen=127.0.0.1:58752 from r:\work\go\hello
DAP server listening at: 127.0.0.1:58752
Build Error: go build -o r:\work\go\hello\__debug_bin.exe -gcflags all=-N -l .
go: go.mod file not found in current directory or any parent directory; see 'go help modules' (exit status 1)
```

<br>

コマンドでコンパイル、実行するにはカレントディレクトリがhelloであることを確認し、下記のようにします。
```shell:手動でコンパイル、実行
# runコマンドを使う場合
>go run hello.go
Hello World

# buildコマンドを使う場合
>go build hello.go
>hello.exe
Hello World
```

<br>

run / build と2つコマンドを使いましたが、どうやら実行ファイルが作成されるかどうかが異なるようです。
|コマンド|実行ファイルの作成|
|:-:|:-:|
|run|しない|
|build|する|

# おわりに
複雑な手順もなく、これでGoの開発環境が整いました。これから勉強を開始します。