読者です 読者をやめる 読者になる 読者になる

備忘録

なんとなく暇なときにでも....

golangのechoフレームワークを使ってRestfulAPIを作る ~POSTデータをテーブルにINSERTする。~

echo golang やってみた

最近は毎日会社が帰ってきてからgolangの勉強するかPS4バイオハザード7するかで毎日悩まされています。

前回の続きです。

前回↓
hchckeeer.hatenadiary.jp
本日はgolangのO/R Mapperのdbrを利用して"テーブルにPOSTしたデータをINSERT"します。

送信するリクエストは以下

curl -v POST -H "Content-Type: application/json" "http://localhost:3000/users" -d '{"id" : 1, "name" : "Taro Yamada", "age":20}'


import (
    "github.com/labstack/echo"
    _ "github.com/go-sql-driver/mysql"
    "github.com/gocraft/dbr"
)

type (
    Users struct {
                Id         int64   `db:"id"`
                Name   string  `db:"name"`
                Age      int    `db:"age"`
    }
)


func main() {
    e := echo.New()
  
    /**
    * Routing
    */
    e.POST("/users", PostUser)
 
    // Start server
    e.Logger.Fatal(e.Start(":3000"))
}


func PostUser(c echo.Context) error {
    conn, err := dbr.Open("mysql", "username:passwd@tcp(127.0.0.1:3306)/test_db", nil)
    if err != nil{
        return err
    }
    sess := conn.NewSession(nil)

    user := new(models.User)
    if err := c.Bind(user); err != nil {
        return err
    }
    c.JSON(http.StatusCreated, user)

    result, err := sess.InsertInto("users").
                    Columns("id", "name", "age").
                    Record(user).Exec()

    if err != nil {
        return err
    } else {
        return c.JSON(http.StatusCreated, result)
    }
}


struct を初期化しているデータを INSERT する場合は、Record() を用います。

その他方法としてはRecord()ではなく、Values()を用いる方法もあります。

// こんな感じ
result, err := sess.InsertInto("users").
                    Columns("id", "name", "agee").
                    Values(1, "Yamada", 20).
                    Exec()


本日は以上です。

github.com