Goで遊ぼう④Gin/GormでWebアプリ作成_DB接続、引数をHTMLに渡すWebアプリ

挨拶

前述の記事で環境設定とHello Worldまでできたので、今後はアプリケーション開発に映っていく。フレームワークにて、Gin / Gormというものが有力らしいので、そっから何か作っていこうと思っている。


引用

  1. https://qiita.com/Anharu/items/ce644c521a4d52fafb7e
  2. https://qiita.com/hyo_07/items/59c093dda143325b1859
1.では基本的な流れを書いてる。
2.では細かいソースの内容を書いてる。

◆Gin:
→Webフレームワーク
◆Gorm:
→GOにおけるORマッパー

作成開始

◆Ginのインストール
>> go get github.com/gin-gonic/gin
◆作業用ディレクトリ作成
>>mkdir ~/go/src/gin-first-app
◆mainファイル作成
package main import "github.com/gin-gonic/gin" func main() { r := gin.Default() r.GET("/", func(c *gin.Context) { c.String(200, "Hello,World!") }) r.Run()}
◆実行


Web applicationとしての体裁を整える

バックエンド機能として、、、
◆Gormインストール
>>go get -u github.com/jinzhu/gorm
◆go-sqlite3インストール
>>go get -u github.com/mattn/go-sqlite3

go の main.goをdbのCRUD持たせること
ソースコード
package main

import (
        "fmt"
        "strconv"
        "github.com/gin-gonic/gin"
        "github.com/jinzhu/gorm"
        _ "github.com/mattn/go-sqlite3"
        _ "net/http"
)

type Person struct {
        gorm.Model
        Name string
        Age  int
}

func db_init() {
        dberr := gorm.Open("sqlite3""test.sqlite3")
        if err != nil {
                panic("failed to connect database\n")
        }

        db.AutoMigrate(&Person{})
}
func create(name string, age int) {
        dberr := gorm.Open("sqlite3""test.sqlite3")
        if err != nil {
                panic("failed to connect database\n")
        }
        db.Create(&Person{Name: name, Age: age})
}
func get_all() []Person {
        dberr := gorm.Open("sqlite3""test.sqlite3")
        if err != nil {
                panic("failed to connect database\n")
        }
        var people []Person
        db.Find(&people)
        return people

}
func main() {
        r := gin.Default()
        r.LoadHTMLGlob("templates/*")
        db_init()
        r.GET("/"func(c *gin.Context) {
                people := get_all()
                c.HTML(200"index.tmpl", gin.H{
                        "people": people,
                })
        })
        r.POST("/new"func(c *gin.Context) {
                name := c.PostForm("name")
                age_ := strconv.Atoi(c.PostForm("age"))
                create(name, age)
                c.Redirect(302"/")
        })
        r.Run()
}
---
index.tpml
<html>
<head>
    <title>The first app on Gin WAF </title>
</head>
<body>
    <h1> 一覧</h1>
<form method="post" action="/new">
    <p>名前<input type="text" name="name" size="30" placeholder="入力してください" ></p>
    <p>年齢<input type="number" name="age" ></p>
    <p><input type="submit" value="Send"></p>
</form>
<ul>
    {{ range .people }}
        <li>{{.Name}}さん{{.Age}}才</li>
    {{ end }}
</ul>
</body>
</html>

importの時に気を付ける点
        _ "github.com/mattn/go-sqlite3"
        _ "net/http"
ここでの _ という渡し方
まずパッケージのimportですが、sqlite3やmysqlなどのDBのパッケージですが、操作はGORMで行うため、importはしますが以下のように使わないということを明示します。

直接的にimportされてない!などとは言われませんが、ちゃんとimportの中にsqlite3を入れておかないとエラーが起きてしまうので、忘れないでください。

出来上がりこんな感じです。


------
つぎはこういうことやるよ

Next Post Previous Post
No Comment
Add Comment
comment url