【Go】gin packageを使用して簡単なweb アプリケーションを作成する

go の導入についてはこちらを参考にしてみてください。
blog.bltinc.co.jp

最近Goとnet/http packageを使用して色々勉強しています。
今回はginが結構便利だったので、備忘録程度に残しておきます。

ちなみにnet/http packageについてのあれこれももっと勉強して記事にできればと思っています。

gin packageって?

GoのWeb frameworkです。
net/httpと組み合わせて使用します。

gin githubには、パフォーマンスと生産性にとても優れていると書いてあります。
web周りの知識だったりがまだ初学者レベルなので、この辺りはイマイチわかりません。すみません。。。

If you need performance and good productivity, you will love Gin.

書いてみよう

何はともあれ書いて実行してみましょう。
詳しい動きはそのあと確認します。

main.go
package main

import (
    "net/http"

    "github.com/gin-gonic/gin"
)

func main() {
    router := gin.Default()
    router.LoadHTMLGlob("views/*.html")
    router.Static("/assets", "./assets")

    router.GET("/", func(ctx *gin.Context) {
        ctx.HTML(http.StatusOK, "index.html", gin.H{})
    })

    router.Run(":8080")
}
tree

$ brew install treeで使える。便利。

.
├── assets
│   └── hoge.js
├── go.mod
├── go.sum
├── interface
├── main.go
├── pkg
└── views
    └── index.html

4 directories, 5 files

go run main.goなりを実行して、localhost:8080にアクセスしてみてください。
配置したindex.htmlが配置されるのが確認できるかと思います。

ちょこっと解説

上から順にどんなことをしているのか確認してみましょう。
これを読めば何となくの動きはわかってもらえるを目指して解説していきます。
※詳しくはsourceみてねの精神です。
gin GoDoc gin github

Default()

router = gin.Default()

logger と recoveryという機能(ミドルウェア)を搭載したエンジンインスタンスを返しています。
エンジンインスタンスはwebに特化した機能、loggerはdebug出力をしてくれるようなもので、recoveryは失敗した時に500を返してくれるやつくらいの解釈で良いです。

Web触る前の準備だと思ってもらえれば良いと思います。

LoadHTMLGlob()

router.LoadHTMLGlob("views/*.html")

glob(この場合は、views/配下のすべての.html)で指定されたhtmlをレンダリングしています。sourceをみると、テンプレートにsetしているのがわかります。

Static()

router.Static("/assets", "./assets")

指定されたファイルシステムのルートからファイルを提供してくれます。ここにcssとかjsとかを置くと使えるようになります。便利。

GET()

router.GET("/", func(ctx *gin.Context) {
        ctx.HTML(http.StatusOK, "index.html", gin.H{})
    })

route.Handleのショートカット、要はGETのhandlerです。
localhost:8080//'でアクセスすると、index.htmlを表示してくれるのはここで、ハンドラーとして登録しているおかげです。 GET('/hoge', func())とすると、localhost:8080/hoge`とアクセスしないとindex.htmlは見えなくなります。

Run()

router.Run(":8080")

HTTPリクエストのリスニングとサービスを開始します。
http.LIstenAndSerivce()のショートカットです。

解説が間違っていたら、コメントでやんわり知らせていただけると大変助かります。

最後に

勉強不足ですが、ginはまだまだたくさんの便利機能があります。jsonとかをいじいじできるので、構造体とかと組み合わせて色々できそうな気がしています。

実際にとても簡単だったと思うので、Webアプリケーションを作ってみたいという方、是非ginを使ってみてください。
それでは〜


バレットグループでは一緒に働いてくれるエンジニアを募集しております!!

▼詳しくはこちら!

bltinc.co.jp