今回は実際にローカルでGolangのフレームワークGinを用いて、ブラウザに「Hello World」を描画してみようじゃないかということで、
結構苦戦した結果、Hello Worldできたので、苦戦の証というか、はまりポイントを覚えている範囲で残しておこうと思います。
※結構雑になってしまってるので、適宜更新はするつもりではいますが、とりあえず自分がわかるので公開しちゃいます。
なおGolangについては、少なくとも弊社のプロダクトでは使われていない(と思う)し、周りにやっている人も(知る限り)聞いたことないので、完全独学です。
そのため、もがきあがいた結果なので、「もっとこうやったら楽なのに~」とかあったらコメントなどでご教示いただけるとありがたいです。
#ローカルの環境
- macOS Big sur11.6
- Safali 15.0
- Editor VSCode
※普段の仕事ではWindowsなのでマジで慣れてません(自宅にはWindowsのデスクトップとMacBook Airがあります)
#Hello worldまでの流れ
ざっくり、流れをメモっておきます。
- Goのインストール
- 【はまりポイント1】GitHubでrepo作成&pull
- 【はまりポイント2】gomoduleのセットアップ
- 【はまりポイント3】Ginのインストール
- 実行
#Goのインストール
「キノコード / プログラミング学習チャンネル」の以下の動画を参考にやりましたので割愛します。
【Go言語 超入門コース】03.環境構築 for Mac|プログラミングをする準備をしよう!【プログラミング初心者向け入門講座】
ここでターミナルでHello WorldできればローカルでGolangが動かせるところまでは完成です。
※ここまでは余裕でした
#【はまりポイント1】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を使いこなそう
、、、ところが!私はここでつまずきました。
######1、コミットが全然できない
VSCodeで編集したコードをcommitしGitHubにpushしていくのですが、
初めての場合は認証をチェックするっぽいです。
もうでなくなったのでダイアログ見せられないのですが、
ダイアログに従っていくとGitHubの画面でtokenが発行されます。
このtokenどこに書き込んだり入力したりするのか不明だったのですが、
VSCodeに戻ってくると一番下の部分にクルクルなっていた。
そこを押すとコマンドパレットに誘導されまして、
そこに入力すればよかったのです。
######2、pushができない
commitはできました。が、次はpushができません。
どうやらVSCodeに設定が必要なようです。
が、これについては前出の動画で解説されていたので、無事pushできました。
#【はまりポイント2】gomoduleのセットアップ
先に言うと以下の3記事で解決したのですが、後述する**【はまりポイント3】Ginのインストール**だけだと駄目だったようです。
記事の内容で理解できたので、詳しい内容は割愛しますが、
go get -u github.com/gin-gonic/gin
だけだとなんかダメなんです。
GO111MODULE=on
にしたうえで
go mod init mygo-test
が必要だったのです。
すると、go.modというファイルができるので、後はここに**【はまりポイント3】Ginのインストール**の内容を反映させればOKみたいです。
#【はまりポイント3】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
のようなログが出るので、これであとは
でHello Worldが出れば成功です!
#最後に
Javaだったらここにたどり着くまでたぶん30分かからないと思うが、合計で5時間くらいかかったかな。
慣れってすごい、恐ろしい。
#Appendix
↓Hello Worldやったコード(はちゃめちゃですがmain.goとindex.html)