跳至主要内容

[gin] routes 路由

定義路由

Using GET, POST, PUT, PATCH, DELETE and OPTIONS @ API Example

  • gin.Default():使用 gin router 預設的 middleware,包含 logger 和 recover (crash-free) 的 middleware
  • router.Run():預設是 :8080 ,可以用字串修改,例如 router.Run(":3000")
func main() {
// Creates a gin router with default middleware:
// logger and recovery (crash-free) middleware
router := gin.Default()

router.GET("/someGet", getting)
router.POST("/somePost", posting)
router.PUT("/somePut", putting)
router.DELETE("/someDelete", deleting)
router.PATCH("/somePatch", patching)
router.HEAD("/someHead", head)
router.OPTIONS("/someOptions", options)

// By default it serves on :8080 unless a PORT environment variable was defined.
router.Run()
// router.Run(":3000") for a hard coded port
}

Parameters in Path

取得網址中的 params:

  • 在路由設定中
    • 使用 :<filed> 可以定義動態路由(只能匹配到 / 以前)
    • 使用 *<filed> 可以定義動態路由(可以匹配到 / 以後)
  • c.Param("<field>") 可以取得網址中的參數
  • c.Fullpath() 可以取得定義的路由參數

Parameters in path

func main() {
router := gin.Default()

router.GET("/user", func(c *gin.Context) {
c.String(200, "/user")
})

// 不會匹配到 /user/ 或 /user
router.GET("/user/:name", func(c *gin.Context) {
fmt.Println(c.FullPath()) // /user/:name/
name := c.Param("name")
c.String(http.StatusOK, "Hello %s", name)
})

// 然而,這將會匹配到 /user/john/ 和 /user/john/send
// If no other routers match /user/john, it will redirect to /user/john/
router.GET("/user/:name/*action", func(c *gin.Context) {
fmt.Println(c.FullPath()) // /user/:name/*action
name := c.Param("name")
action := c.Param("action")
message := name + " is " + action
c.String(http.StatusOK, message)
})

router.Run(":3000")
}

建立 HTTPS / SSL 的 路由

// 可以使用 Gin 提供的 router.RunTLS
func main() {
router := gin.Default()
go router.RunTLS(":443", config.SSL.CertFile, config.SSL.CertKey)
go router.Run(":80")
}

或者使用原生的 http.ListenAndServeTLS()

func main() {
http.ListenAndServeTLS(addr, certFile, keyFile, engine)
}