Javaで飯食ってるエンジニアがGolangを学んでみる～Ginを使ってHelloWorld編～

今回は実際にローカルでGolangのフレームワークGinを用いて、ブラウザに「Hello World」を描画してみようじゃないかということで、
結構苦戦した結果、Hello Worldできたので、苦戦の証というか、はまりポイントを覚えている範囲で残しておこうと思います。


※結構雑になってしまってるので、適宜更新はするつもりではいますが、とりあえず自分がわかるので公開しちゃいます。

なおGolangについては、少なくとも弊社のプロダクトでは使われていない（と思う）し、周りにやっている人も（知る限り）聞いたことないので、完全独学です。
そのため、もがきあがいた結果なので、「もっとこうやったら楽なのに～」とかあったらコメントなどでご教示いただけるとありがたいです。

#ローカルの環境

- macOS Big sur11.6
- Safali 15.0
- Editor VSCode

※普段の仕事ではWindowsなのでマジで慣れてません（自宅にはWindowsのデスクトップとMacBook Airがあります）

#Hello worldまでの流れ

ざっくり、流れをメモっておきます。

- Goのインストール
- 【はまりポイント１】GitHubでrepo作成＆pull
- 【はまりポイント２】gomoduleのセットアップ
- 【はまりポイント３】Ginのインストール
- 実行

#Goのインストール

「キノコード / プログラミング学習チャンネル」の以下の動画を参考にやりましたので割愛します。
**【Go言語 超入門コース】03.環境構築 for Mac｜プログラミングをする準備をしよう！【プログラミング初心者向け入門講座】**

https://www.youtube.com/watch?v=IlRHVUtMdx4&t=0s

ここでターミナルでHello WorldできればローカルでGolangが動かせるところまでは完成です。

※ここまでは余裕でした

#【はまりポイント１】GitHubでrepo作成＆pull

##GitHubにリポジトリ（以下Repoと記載）を作成

ローカルで作成した階層をGithubに突っ込む方法がよくわからなかった（できるかも不明だった）ので、まずGitHubに**mygo-test**みたいな適当なRepoを作っておきます。

Goインストールの段階で**$GOPATH**なるものが生成されていると思います。ターミナルで

```
$ cd $GOPATH
$ mkdir src
```

の順に実行します。
カレントディレクトリは**$GOPATH**になっていると思うので、以下のようになっていることをlsコマンドで確認してみましょう。
※3つのディレクトリが**$GOPATH**以下にあることが確認できると思います

```
$GOPATH ┬ bin
        ├ pkg
        └ src 
```

最後に

```
cd src
```

カレントディレクトリがsrcになったら、ここに**mygo-test**をクローンします。
※Golangは**$GOPATH**以下にすべてを置くルールがあるらしいです。(記事紛失)

クローンは通常通り

```
git clone https://github.com/XXXXX/mygo-test.git
```

となります。

```
$GOPATH ┬ bin
        ├ pkg
        └ src - mygo-test
```
のようになったことを確認しましょう。
そしたらひとまず、このmygo-testをVSCodeで開きます。

（ターミナルでHello Worldくらいは確認してもいいでしょう。）

>ここから本題

適当なファイルを作成し、（私はgreetingフォルダにgreeting.goを作って実験しました）
実際にコミットしていきます。

VSCodeでのGit操作については、「たにぐち まことのともすたチャンネル」の以下動画を参考にしましたので詳細は割愛します。

**Visual Studio Code入門 #07：Gitクライアントはもういらない！ VSCodeで、Gitを使いこなそう**

https://www.youtube.com/watch?v=vMZ0C06soxA


、、、ところが！私はここでつまずきました。

######１、コミットが全然できない

VSCodeで編集したコードをcommitしGitHubにpushしていくのですが、
初めての場合は認証をチェックするっぽいです。

もうでなくなったのでダイアログ見せられないのですが、
ダイアログに従っていくとGitHubの画面でtokenが発行されます。

このtokenどこに書き込んだり入力したりするのか不明だったのですが、
VSCodeに戻ってくると一番下の部分にクルクルなっていた。


![スクリーンショット 2021-09-26 17.52.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939153/78b5d54a-081e-0ee8-e8b1-09354f2cf038.png)



そこを押すとコマンドパレットに誘導されまして、
そこに入力すればよかったのです。

######２、pushができない

commitはできました。が、次はpushができません。
どうやらVSCodeに設定が必要なようです。

が、これについては前出の動画で解説されていたので、無事pushできました。




#【はまりポイント２】gomoduleのセットアップ

先に言うと以下の３記事で解決したのですが、後述する**【はまりポイント３】Ginのインストール**だけだと駄目だったようです。

https://text.baldanders.info/golang/manage-modules/

https://qiita.com/matopenKW/items/8004eca7a6ccc46ead89

https://qiita.com/Syoitu/items/f221b52231703cebe8ff

記事の内容で理解できたので、詳しい内容は割愛しますが、

```
go get -u github.com/gin-gonic/gin
```
だけだとなんかダメなんです。

```
GO111MODULE=on
```
にしたうえで

```
go mod init mygo-test
```
が必要だったのです。

すると、go.modというファイルができるので、後はここに**【はまりポイント３】Ginのインストール**の内容を反映させればOKみたいです。



#【はまりポイント３】Ginのインストール

最後のはまりポイントなのですが、実際は↑の順にやれていればはまらなかったと思います。
シンプルに

```
go get -u github.com/gin-gonic/gin
```
を実行すると、src以下にいろいろ落ちてきますよ～と。
そいつをライブラリとして用いることができるわけです。
なお、**github.com**が**mygo-test**と同じ階層に並ぶことになります。

これであとはブラウザ描画用のコードを書けばOKです。

ターミナルで

```
go run main.go
```
のようにやれば

```
[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
[GIN-debug] Listening and serving HTTP on :8080
```
のようなログが出るので、これであとは

http://localhost:8080

でHello Worldが出れば成功です！

![スクリーンショット 2021-09-26 17.50.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939153/573b4923-ec50-0c96-4c38-1d74efc570dd.png)


#最後に

Javaだったらここにたどり着くまでたぶん30分かからないと思うが、合計で5時間くらいかかったかな。
慣れってすごい、恐ろしい。

#Appendix

↓Hello Worldやったコード（はちゃめちゃですがmain.goとindex.html）

https://github.com/masanori-soeda/mygo-test