路由

匹配所有

匹配零个或多个字符的路径。例如, /users/* 将会匹配;

  • /users/
  • /users/1
  • /users/1/files/1
  • /users/anything...

路径匹配顺序

  • Static (固定路径)
  • Param (参数路径)
  • Match any (匹配所有)

示例

e.GET("/users/:id", func(c echo.Context) error {
	return c.String(http.StatusOK, "/users/:id")
})

e.GET("/users/new", func(c echo.Context) error {
	return c.String(http.StatusOK, "/users/new")
})

e.GET("/users/1/files/*", func(c echo.Context) error {
	return c.String(http.StatusOK, "/users/1/files/*")
})

上面定义的路由将按下面的优先级顺序匹配:

  • /users/new
  • /users/:id
  • /users/1/files/*

路由命名

每个注册路由返回一个 Route 对象。它可以在注册了之后用来给路由命名。比如:

routeInfo := e.GET("/users", func(c echo.Context) error {
	return c.String(http.StatusOK, "route test")
})
routeInfo.Name = "user"

// 或者这样写
e.GET("/users/new", func(c echo.Context) error {
	return c.String(http.StatusOK, "route test")
}).Name = "newuser"

当需要在模版生成uri的时候使用命名路由就会比较方便。

构造URI

Echo.URI Echo.URL可以通过构造方法来生成url

func main() {
	e := echo.New()
	e.GET("/admin/:id", resp)
	// 根据handlerFunc生成url
	uri := e.URI(resp, 123456)
	fmt.Println(uri)
	e.Logger.Fatal(e.Start(":8000"))
}

func resp(c echo.Context) error {
	return c.String(http.StatusOK, "OK")
}

Echo#Reverse(name string, params ...interface{}) 方法用来根据路由名生成 uri

func main() {
	e := echo.New()
	e.GET("/admin/:id", resp).Name = "admin"
	// 根据路由名称生成uri
	uri := e.Reverse("admin", 123456)
	fmt.Println(uri)
	e.Logger.Fatal(e.Start(":8000"))
}

func resp(c echo.Context) error {
	return c.String(http.StatusOK, "OK")
}

 

posted @ 2019-05-25 00:41  Jin同学  阅读(161)  评论(0)    收藏  举报