万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    ginでGroup化したルーティング

    いままでこんな書き方してたが冗長。

    func (controller *ShopsController) Setup() {
            controller.Router.POST("/shops", controller.createShop)
            controller.Router.GET("/shops", controller.listShops)
            controller.Router.GET("/shops/:shop_id", controller.getShop)
            controller.Router.PUT("/shops/:shop_id", controller.updateShop)
            controller.Router.DELETE("/shops/:shop_id", controller.deleteShop)
    }

    Martiniはこうかける GitHub - go-martini/martini: Classy web framework for Go

    Ginにもあった。 GitHub - gin-gonic/gin: Gin is a HTTP web framework written in Go (Golang). It features a Martini-like API with much better performance -- up to 40 times faster. If you need smashing performance, get yourself some Gin.

    Grouping routes

    func main() {
        router := gin.Default()
    
        // Simple group: v1
        v1 := router.Group("/v1")
        {
            v1.POST("/login", loginEndpoint)
            v1.POST("/submit", submitEndpoint)
            v1.POST("/read", readEndpoint)
        }
    
        // Simple group: v2
        v2 := router.Group("/v2")
        {
            v2.POST("/login", loginEndpoint)
            v2.POST("/submit", submitEndpoint)
            v2.POST("/read", readEndpoint)
        }
    
        router.Run(":8080")
    }

    私の例は、https://github.com/dcu/gin-scaffoldを使ってるので、

    以下のようになる。 controller.Routerを変数v1に置き換えたような感じに。

    func (controller *ShopsController) Setup() {
    
            v1 := controller.Router.Group("/shops")
            {
                    v1.POST("", controller.createShop)
                    v1.GET("", controller.listShops)
                    v1.GET("/:shop_id", controller.getShop)
                    v1.PUT("/:shop_id", controller.updateShop)
                    v1.DELETE("/:shop_id", controller.deleteShop)
            }
    }

    気をつけるのは、v1.GET("", controller.listShops)これ。 /を入れてv1.GET("/", controller.listShops)としてしまうと、 http://localhost:4000/shopsでなくhttp://localhost:4001/shops/のように最後に/が必要だし 色々なページのURLが変わってしまう。