在我们开发定义路由的时候,可能会遇到很多部分重复的路由:
/admin/users
/admin/manager
/admin/photo
以上等等,这些路由最前面的部分/admin/
是相同的,如果我们一个个写也没问题,但是不免会觉得琐碎、重复,无用劳动,那么有没有一种更好的办法来解决呢?Gin
为我们提供的解决方案就是分组路由
分组路由
类似以上示例,就是分好组的路由,分组的原因有很多,比如基于模块化,把同样模块的放在一起,比如基于版本,把相同版本的API放一起,便于使用。在有的框架中,分组路由也被称之为命名空间。
假如我们现在要升级新版本APi,但是旧的版本我们又要保留以兼容老用户。那么我们使用Gin
就可以这么做
func main() {
r := gin.Default()
//V1版本的API
v1Group := r.Group("/v1")
v1Group.GET("/users", func(c *gin.Context) {
c.String(200, "/v1/users")
})
v1Group.GET("/products", func(c *gin.Context) {
c.String(200, "/v1/products")
})
//V2版本的API
v2Group := r.Group("/v2")
v2Group.GET("/users", func(c *gin.Context) {
c.String(200, "/v2/users")
})
v2Group.GET("/products", func(c *gin.Context) {
c.String(200, "/v2/products")
})
r.Run(":8080")
}
只需要通过Group
方法就可以生成一个分组,然后用这个分组来注册不同路由,用法和我们直接使用r
变量一样,非常简单。这里为了便于阅读,一般都是把不同分组的,用{}
括起来。
v1Group := r.Group("/v1")
{
v1Group.GET("/users", func(c *gin.Context) {
c