【Go】VsCodeで環境構築手順


## はじめに
ブロックチェーンの勉強を行っていると、結構Go言語の話が出たり求人とかもGo言語が求められているので、今後必要になりそうだなーと思ったので早速Udemyで講座を購入し、勉強をはじめました！！
が、収録されている時からGoのバージョンが上がっていて`go get`が使えなかったりして地味に環境構築に時間が取られたので、他の方にも参考になればと思い投稿することにしました。

>Udemy 講座
[現役シリコンバレーエンジニアが教えるGo入門＋応用でビットコインのシストレFintechアプリの開発](https://www.udemy.com/course/go-fintech/)



# 環境
```
OS     : Mac
エディタ : VScode
Go     : 1.17.4
```

注※本記事ではVscodeのインストール方法は記載しておりません。

# Goのインストール

[Downloads](https://go.dev/dl/)のサイトからパッケージをダウンロードして、インストールしました。


![スクリーンショット 2021-12-04 19.41.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015999/44d21b27-cafa-9b12-31f3-fcd5aa282e38.png)


バージョン確認してGoが無事にインストールできたことを確認！

```bash
go version
go version go1.17.4 darwin/amd64
```

# Homebrewのインストール
（私は既にインストール済みだったので、実際にはやっていません）

[Homebrew](https://brew.sh/index_ja)のサイトから記載されているインストール用のコマンドをコピーして、ターミナルに貼り付けて実行することでインストールできます。

下記スクリプトをターミナルで実行

```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

実行時にパスワード聞かれたりしますが、ログインする時のパスワードを入れればよかったはずです。

バージョン確認してHomebrewが無事にインストールできたことを確認！

```bash
brew -v
Homebrew 3.3.6-72-g5096d6e
...
```


# 外部パッケージを取得

プログラムを書くときには外部パッケージを利用していくことになります。
そのためには、Gitが必要らしいので、上記でインストールしたHomebrewを使用してGitをインストールします。

```bash
brew install git
```

バージョン確認してGoが無事にインストールできたことを確認！

```bash
git --version
git version 2.24.3 (Apple Git-128)
```

## godocを取得

外部パッケージが取得できることの確認としてgodocを試しに取得します。

>godocとは？
Go言語は、godoc というコマンドがあります。
このコマンドを使用することでgolang.orgのパッケージのドキュメントをオフラインで閲覧することが出来ます。


講座では`go get XXX`で外部パッケージ取得していましたが、私がインストールしたGoでは`go get`が使用できなくなっており、なんだこれってなりました。。
調べてみると、go1.17から`go get`は非推奨、代わりに`go install`を使用してねーとのことでした。

上記の理由から以下のコマンドでgodocを取得しました。

```bash
go install golang.org/x/tools/cmd/godoc@latest
```


以下のコマンドでfmtのドキュメントを確認して、godocが無事に取得できたことを確認！

したいのですが、ここでも講座では`godoc fmt`でgodocを参照できるとのことでしたが、
仕様が変更されたみたいで`godoc fmt`のコマンドを実行しても、以下のメッセージが表示され、godocが読み込めませんでした。

```bash
godoc fmt
-bash: godoc: command not found
```

調べてみると、godocのCLIモードはサポート終了されていることが原因らしく、
その代わりに`go doc`を使用してねーとのことみたいです。
なので`go doc`を使用すると長文が表示されており、どうやら無事にgodocが取得できているみたいです。

```bash
go doc fmt
package fmt // import "fmt"

Package fmt implements formatted I/O with functions analogous to C's printf
and scanf. The format 'verbs' are derived from C's but are simpler.
...
```

>参考
[godocの代わりに go doc を推奨された件について](https://hodalog.com/use-go-doc-for-command-line-help-output-instead-of-godoc/)


# Vscodeをインストール

Vscodeのインストールについては、私は既にインストール済みであること、
インストール方法は、たくさん記事があるので本記事では割愛させていただきます。

# VscodeでGoの環境を設定

まずはMarketplaceで拡張機能をインストールします。
「Go」と検索すれば一番上に表示されると思います。

![スクリーンショット 2021-12-05 1.17.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015999/001a03fa-08da-2a25-bdc7-2f0e62272ec9.png)

拡張機能「Go」がインストールできたら、開発に必要なライブラリ（デバッグ用のライブラリ等）は別途でインストールする必要があるらしいので、実施して行きます。

・`F1`で、コマンドパレットを呼び出し、「>go Install」で検索
・「Go: Install/Update Tools」が表示されるのでクリック
![スクリーンショット 2021-12-05 1.29.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015999/ae159462-dddf-2ac3-6259-48fd46af1143.png)

・必要なものを選択し、OKを押下し、インストール完了
　とりあえず私は全部にチェックを入れてインストールしました
![スクリーンショット 2021-12-05 1.35.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015999/79dfd1a2-d70a-6b5e-1915-2128340d4914.png)

ここまで終われば一旦、設定は完了です。


# Goでhello world

HelloWorld 用のファイルを作成。
どこでも良いと思いますが、私は以下に作成しました。

```
$GOPATH/src/hello_world.go
```

GOPATHの場所は`go env`で確認できます。
hello_world.goの内容はこんな感じ

```hello_world.go
package main

import "fmt"

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

```

`F5`でデバッグ実行を行うと、以下のエラーが起きて実行できませんでした。
なにかする度につまづいている気がします。

```
go: go.mod file not found in current directory or any parent directory; see 'go help modules' (exit status 1)
```

go.modがないんだなーというのはわかりました。
調べた結果modファイルを作ってあげればいいみたいです。
$\tiny{なんで必要とか細かいところまでは今後調べます！！}$ 

Vscodeでターミナルを開いて`go mod init [プロジェクト名]`のコマンドを実行して作成します。

```terminal
src $ go mod init hello_world
go: creating new go.mod: module hello_world
go: to add module requirements and sums:
        go mod tidy
```

go.modというファイルができました。
中身はこんな感じですね。依存関係が追加されていくとかどうとか・・

```go.mod
module hello_world

go 1.17
```

go.modファイルが無事作成されたことが確認できたので、再度
`F5`でデバッグ実行を行うと,無事にHello world!が出力されました！
![スクリーンショット 2021-12-05 2.18.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015999/0c070270-ce95-ed64-e9eb-254532f32f6f.png)

>参考
[VSCode を使って Go のデバッガーが動くまでの設定をした](https://qiita.com/toshihirock/items/c660fd77f5f3cc47b560)
[VSCodeでGoの開発ができるようにする](https://sunday-morning.app/posts/2019-07-23-vscode-go)
[VSCodeでGo言語の開発環境を構築する](https://qiita.com/melty_go/items/c977ba594efcffc8b567)


## おわりに

Udemyの講座と違う部分もあり、少し時間を使いましたが無事にVsCodeで実行することが出来ました。
長くなってしまいましたが、誰かのお役に立てれば幸いです。
細かい部分の調査ができていなかったり、記載ミス等ありましたら優しく教えて欲しいです:relaxed: