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

peroon's diary

game programmer

Go+echoにURLパラメータでユーザIDを入れてMongoDBから引く

URLパラメータでidを取得したが、その型がstringなのでintに変換してからFindする必要があった。http://localhost:1323/users/id/2 このようにアクセスするとIDに従ったユーザの名前が表示できる。

package main

import (
    // サーバ系
    "net/http"
    "github.com/labstack/echo"
    "github.com/labstack/echo/engine/standard"

    // mongo系
    "fmt"
    "gopkg.in/mgo.v2"
    "gopkg.in/mgo.v2/bson"

    // 型
    "strconv"
    //"reflect"
)

// ユーザクラス
type User struct {
    Name  string `bson:"name"`
    Id int `bson:"id"`
}

func main() {
    e := echo.New()
    e.GET("/", func(c echo.Context) error {
        return c.String(http.StatusOK, "Hello, World!")
    })

    // :id, :name に値が入っていないとNot Foundになる
    e.GET("/users/id/:id", func(c echo.Context) error {

      // 数値に変換する必要あり
      var id int
      id, _ = strconv.Atoi(c.Param("id"))

      //idでDBを引く
      session, _ := mgo.Dial("mongodb://localhost")
        defer session.Close()
      db := session.DB("mydb")

        // id指定でユーザ取得
        var results []User
        fmt.Println(id)    
        db.C("users").Find(bson.M{"id": id}).All(&results)
         
        fmt.Println("Results of one user: ", results)
        fmt.Println(len(results))    

        if len(results) == 0 {
            return c.String(http.StatusOK, "No user")
        }else{
            name := results[0].Name
            return c.String(http.StatusOK, "Hello, " + name)
        }
    })

    e.POST("/user", func(c echo.Context) error {
        return c.String(http.StatusOK, "Hello, POST user")
    })

    // ポート
    e.Run(standard.New(":1323"))
}