路由
匹配所有
匹配零个或多个字符的路径。例如, /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") }