Go
gin

【Go x gin】 はじめてのGo Webフレームワーク編

More than 1 year has passed since last update.

プロジェクトの作成とginのインストール

gvm glideをインストールしてる前提
https://qiita.com/Yasunobu/items/35e0fafe8c01030da5f2

フレームワーク色々ありますが
githubのスター数とパフォーマンス売りにしてるということで
ginを使ってみる事にしました。
https://gin-gonic.github.io/gin/

これ、最初わからなかったんですが
$GOPATHの下にプロジェクト切るそうですね。
ちょっと他と違うのでびっくりしました。

echo $GOPATH
/Users/UserName/.gvm/pkgsets/go1.9/global

プロジェクト自体は他のソースと同じ場所に置いときたいので
シンボリックでやってみることにしました。

プロジェクトのディレクトリ作成

mkdir project_path/goweb-base

シンボリックリンク

mkdir  /Users/UserName/.gvm/pkgsets/go1.9/global/src
ln -s project_path/goweb-base  /Users/UserName/.gvm/pkgsets/go1.9/global/src/

ginのインストール

cd /Users/UserName/.gvm/pkgsets/go1.9/global/src/goweb-base
glide init
glide get github.com/gin-gonic/gin
glide up

とりあえず、ためしに動かしてみる

vim project_path/goweb-base/main.go
package main

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


func main() {
    r := gin.Default()
    r.GET("/hello", func(c *gin.Context) {
        c.String(200, "hello")
    })

    // 8080他で使ってたので5000
    r.Run(":5000")
}

cd /Users/UserName/.gvm/pkgsets/go1.9/global/src/goweb-base/
go run goweb-base.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] GET    /hello                    --> main.main.func1 (3 handlers)
[GIN-debug] Listening and serving HTTP on :5000

成功。

テンプレートエンジン使ってhtml表示してみる

cd /Users/UserName/.gvm/pkgsets/go1.9/global/src/goweb-base/
mkdir templates
vim templates/index.tmpl

htmlを記載

{{ define "index.tmpl" }}
<html><h1>
        {{ .title }}
</h1>
<p>sample view</p>
</html>
{{ end }}

ソースも修正

vim goweb-base.go
package main

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


func main() {
        r := gin.Default()
        r.LoadHTMLGlob("templates/*")
        r.GET("/hello", func(c *gin.Context) {
                c.String(200, "hello")
        })

        r.GET("/", func(c *gin.Context) {
                c.HTML(http.StatusOK, "index.tmpl", gin.H{
                        "title": "INDEX_PAGE",
                })
        })

        // 8080他で使ってたので5000
        r.Run(":5000")
}

こんな感じで表示されます。done

スクリーンショット 2017-10-19 23.08.14.png

今回作ったやつ

https://github.com/YasunobuSasaki/goweb-base