Goで遊ぼう④Gin/GormでWebアプリ作成_DB接続、引数をHTMLに渡すWebアプリ
挨拶
前述の記事で環境設定とHello Worldまでできたので、今後はアプリケーション開発に映っていく。フレームワークにて、Gin / Gormというものが有力らしいので、そっから何か作っていこうと思っている。引用
- https://qiita.com/Anharu/items/ce644c521a4d52fafb7e
- 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() {
db, err := gorm.Open("sqlite3", "test.sqlite3")
if err != nil {
panic("failed to connect database\n")
}
db.AutoMigrate(&Person{})
}
func create(name string, age int) {
db, err := 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 {
db, err := 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
importの時に気を付ける点
ここでの _ という渡し方
まずパッケージのimportですが、sqlite3やmysqlなどのDBのパッケージですが、操作はGORMで行うため、importはしますが以下のように使わないということを明示します。
直接的にimportされてない!などとは言われませんが、ちゃんとimportの中にsqlite3を入れておかないとエラーが起きてしまうので、忘れないでください。
出来上がりこんな感じです。
------
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を入れておかないとエラーが起きてしまうので、忘れないでください。
出来上がりこんな感じです。
------
つぎはこういうことやるよ