LoginSignup
10
6

More than 5 years have passed since last update.

go+gin+xormでDBに接続する

Posted at

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の基礎文法など勉強になりました。

10
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
6