前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >7.Gin 路由详解 - 路由分组 - 路由文件抽离

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

作者头像
Devops海洋的渔夫
发布2023-11-20 14:35:52
7310
发布2023-11-20 14:35:52
举报
文章被收录于专栏:Devops专栏

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/%02d/%02d", 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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-11-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 海洋的渔夫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 7.Gin 路由详解 - 路由分组 - 路由文件抽离
    • 前言
      • 路由分组
        • 路由文件抽离
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档