7.Gin 路由详解 - 路由分组 - 路由文件抽离

2023-11-20 14:35:52 浏览数 (2)

7.Gin 路由详解 - 路由分组 - 路由文件抽离

前言

在前面的示例中,我们直接将路由的定义全部写在 main.go 文件中,如果后面 路由越来越多,那将会越来越不好管理。

所以,下一步我们应该考虑将路由进行分组管理,并且将其抽离 main.go的文件。

1696330394289

路由分组

我们可以将相同模块路径的作为一组,将路由进行分组处理。

1696330862506

代码语言:javascript复制
// 2.1 路由分组
// 设置根路径的路由分组
defaultRouter := r.Group("default/")
{
    // c.HTML 渲染模板
    defaultRouter.GET("index", func(c *gin.Context) {
       // 创建对象
       userInfo := UserInfo{
          Name:   "李白",
          Age:    30,
          Gender: "male",
       }
       // 渲染模板
       c.HTML(http.StatusOK, "default/index.html", gin.H{
          "title":    "default前台首页",
          "userInfo": userInfo,
          "score":    60,
          "hobby":    []string{"吃饭", "睡觉", "写代码"},
          "now":      time.Now(),
          "str1":     "hello",
          "str2":     "world",
       })
    })
}

adminGroup := r.Group("admin")
{
    adminGroup.GET("index", func(c *gin.Context) {
       c.HTML(http.StatusOK, "admin/index.html", gin.H{"title": "admin前台首页"})
    })
    adminGroup.GET("goods", func(c *gin.Context) {
       c.HTML(http.StatusOK, "admin/goods.html", gin.H{"title": "商品页面"})
    })
}

为了简单示例,我只是简单分了两个路由组,一个是 default ,另一个是 admin 的路由组。

测试如下:

  • 访问 default组的 index 路由:http://localhost:8000/default/index

1696330950278

  • 访问 admin组的index路由:http://localhost:8000/admin/index

1696330979558

从效果来看,我们可以将相同模块的路由进行分组,但是还是写在main.go代码文件中,下面我们将路由的内容抽离到其他文件。

路由文件抽离

不管是路由分组、还是普通的路由,我们都可以通过单独编写函数,抽离到其他模块去,避免路由代码全部写在 main.go 代码中。

下面我们来简单示例一下。

新建 routes 文件夹,并且按照不同的模块,创建不同的路由管理文件

1696331864037

AdminRouterInit 方法作为示例:

代码语言:javascript复制
package routes

import (
    "github.com/gin-gonic/gin"
    "net/http"
)

// AdminRouterInit Admin路由分组
func AdminRouterInit(r *gin.Engine) {
    // 设置admin路由
    adminRouter := r.Group("admin")
    {
       adminRouter.GET("index", func(c *gin.Context) {
          c.HTML(http.StatusOK, "admin/index.html", gin.H{"title": "admin前台首页"})
       })
       adminRouter.GET("goods", func(c *gin.Context) {
          c.HTML(http.StatusOK, "admin/goods.html", gin.H{"title": "商品页面"})
       })
    }
}

在上面通过函数入参,将 r *gin.Engine 传入函数方法中,然后用来定义路由信息。

main.go 初始化路由

1696331972771

代码语言:javascript复制
package main

import (
 "fmt"
 "github.com/gin-gonic/gin"
 "go-gin-pratice/routes"
 "html/template"
 "time"
)

// 定义时间格式转换的方法
func formatAsDate(t time.Time) string {
 year, month, day := t.Date()
 return fmt.Sprintf("%d/d/d", year, month, day)
}

// 定义打印信息的方法
func printlnMsg(str1 string, str2 string) string {
 return fmt.Sprintf("%s.....%s", str1, str2)
}

func main() {
 // 1.创建路由
 r := gin.Default()
 //注册全局模板函数 注意顺序,注册模板函数需要在加载模板上面
 r.SetFuncMap(template.FuncMap{
  "formatDate": formatAsDate,
  "printlnMsg": printlnMsg,
 })
 // 加载模板文件
 r.LoadHTMLGlob("templates/**/*")
 // 定义静态文件路径
 r.Static("/static", "static")

 // 2.绑定路由规则,执行的函数
 // gin.Context,封装了request和response

 // 2.1 初始化路由
 routes.DefaultRouterInit(r)
 routes.AdminRouterInit(r)
 routes.RootRouterInit(r)

 // 3.监听端口,默认在8080
 // 监听并在 0.0.0.0:8080 上启动服务
 // Run("里面不指定端口号默认为8080")
 r.Run(":8000")
}
测试效果

1696332022586

抽离了路由代码后,接口还是可以正常访问的,说明路由初始化正常。

0 人点赞