goのFWやORM情報を探そうとしても、これといったものが見つからなかったので一通り利用しました。今回はタイトル通り以下の構成で確認します。やりたいことは、登録更新削除のAPIを作成します。APIにおけるデータのやり取りは、リクエストではformを、レスポンスではJSONを利用します。
バージョン
go version go1.6.3 linux/amd64
gin 1.1.4
xorm v0.5.6
インストール手順は省略。
DB
create.sql
CREATE DATABASE note;
CREATE TABLE user (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
name varchar(100) NOT NULL,
password varchar(100) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB;
プログラム
main.go
package main
import (
"strconv"
"github.com/gin-gonic/gin"
"github.com/go-xorm/xorm"
_ "github.com/go-sql-driver/mysql"
)
type User struct {
Id int64 `json:"id" xorm:"'id'"`
Name string `json:"name" xorm:"'name'"`
Password string `json:"password" xorm:"'password'"`
}
func main() {
router := gin.Default()
/* userテーブルから複数レコード取得 */
router.GET("/user/select", func(c *gin.Context) {
engine, _ := xorm.NewEngine("mysql","ユーザ名:パスワード@/note")
users := make([]User, 0)
engine.Find(&users)
c.JSON(200, users)
})
/* userテーブルから1レコード取得 */
router.GET("/user/select/:id", func(c *gin.Context) {
n := c.Param("id")
id, _ := strconv.Atoi(n)
engine, _ := xorm.NewEngine("mysql","ユーザ名:パスワード@/note")
user := User{Id: id}
engine.Get(&user)
c.JSON(200, user)
})
/* userテーブルに1レコード登録 */
router.POST("/user/insert", func(c *gin.Context) {
user := new(User)
user.Name = c.PostForm("name")
user.Password = c.PostForm("password")
engine, _ := xorm.NewEngine("mysql","ユーザ名:パスワード@/note")
engine.Insert(user)
c.JSON(200, user)
})
/* userテーブルの1レコード更新 */
router.PUT("/user/update/:id", func(c *gin.Context) {
n := c.Param("id")
id, _ := strconv.Atoi(n)
engine, _ := xorm.NewEngine("mysql","ユーザ名:パスワード@/note")
user := User{Id: id}
engine.Update(&user, &User{Id:id})
c.JSON(200, users)
})
/* userテーブルの1レコード削除 */
router.DELETE("/user/delete/:id", func(c *gin.Context) {
n := c.Param("id")
id, _ := strconv.Atoi(n)
engine, _ := xorm.NewEngine("mysql","ユーザ名:パスワード@/note")
user := User{Id: id}
engine.Id(id).Delete(&user)
c.JSON(200, "")
})
router.Run(":8080")
}
この構成で動きを確認して構築していましたが、今回の要件に合わなくなったためお蔵入りとなりました。goの基礎文法など勉強になりました。