tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

Golang x Gin(ジン)を5分でためす

はじめに

GolangでGin(ジン)を5分で試すサンプルです。

f:id:tweeeety:20210217212431p:plain

本記事では以下の3要素のみ扱います。

  • Golang
  • Go Modules
  • Gin

アジェンダ

1. Ginとは

Ginは、Golangのフレームワークです。
歴史も長く、Golangで最も使われているフレームワークと言っても過言ではありません。

特徴は「薄い/早い/情報多い」と言った三拍子が揃っています。

Ginは数年前に職場で利用していました。
最近になり、あらためて触る機会が出たので再学習しています。

参考程度に、Golangのフレームワーク5つの人気比較を載せておきます。

FW Name Stars Forks Open Issues
Gin 40.2k 4.6k 238
beego 25.5k 4.9k 746
echo 17.7k 1.6k 37
kit 17.5k 1.8k 59
fasthttp 13k 1.1k 34

ref: Top 5 Golang Frameworks in 2020

2. Go Moduleで環境用意

ローカル環境

まずは、ローカルの環境を参考程度に載せておきます。
あくまでも自分の環境ですのであしからず。

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.15.7
BuildVersion:   19H524

$ go version
go version go1.15.5 darwin/amd64

Go Modules

ディレクトリをつくり、go mod initでセットアップを行います。

# ディレクトリを作る
$ mkdir go-gin-sample
$ pwd
/Users/tweeeety/go/src/github.com/tweeeety/go-gin-sample

# go modulesを初期化する
$ go mod init github.com/tweeeety/go-gin-sample
$ cat go.mod
module github.com/tweeeety/go-gin-sample

go 1.15

3. Ginを試す

Ginいれる

Go Modulesが整っていればgo getするだけです。
正常であればgo.modgo.sumのファイルが作成されているはずです。

$ go get github.com/gin-gonic/gin

$ cat go.mod
module github.com/tweeeety/go-gin-sample

go 1.15

require github.com/gin-gonic/gin v1.6.3 // indirect

GinでGolang書いてみる

main.goにroutingとhtmlを表示するコードのみ書きます。

  • main.go
package main

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

func main() {
    router := gin.Default()
    router.LoadHTMLGlob("templates/*.html")

    data := "Hello Go/Gin!!"

    router.GET("/", func(ctx *gin.Context) {
        ctx.HTML(200, "index.html", gin.H{"data": data})
    })

    router.Run()

}
  • index.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Sample App</title>
</head>
<body>
  <h1>{{.data}}</h1>
</body>
</html>

起動してwebで確認

特に問題がなければgo runで立ち上がります。

$ go run main.go
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:   export GIN_MODE=release
 - using code:  gin.SetMode(gin.ReleaseMode)

[GIN-debug] Loaded HTML Templates (2):
    -
    - index.html

[GIN-debug] GET    /                         --> main.main.func1 (3 handlers)
[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
[GIN-debug] Listening and serving HTTP on :8080
[GIN] 2021/02/15 - 19:57:13 | 200 |     452.175µs |             ::1 | GET      "/"
[GIN] 2021/02/15 - 19:57:14 | 404 |         660ns |             ::1 | GET      "/favicon.ico"

ブラウザでhttp://localhost:8080/にアクセスすると以下のように表示されるのが確認できます。

f:id:tweeeety:20210217212943p:plain

参考

おわりに

かなり爆速で試せたんではないでしょうか?
今回のリポジトリは以下です。

https://github.com/tweeeety/go-gin-sample

薄いと開始が早くて良いですね!
routingもいろいろできます。そのあたりを含めたAPI Sampleは公式をご確認ください。