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

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

前言

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

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

路由分组

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

go 复制代码
// 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 的路由组。

测试如下:

1696330950278

1696330979558

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

路由文件抽离

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

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

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

1696331864037

AdminRouterInit 方法作为示例:

go 复制代码
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

go 复制代码
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

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

相关推荐
假装我不帅16 小时前
wsl+vscode开发.net项目
ide·vscode·.net
小蕾Java17 小时前
【VSCode】Visual Studio Code 2025安装包及安装教程 (附所有版本下载)
ide·vscode·编辑器
takashi_void17 小时前
如何在本地部署大语言模型(Windows,Mac,Linux)三系统教程
linux·人工智能·windows·macos·语言模型·nlp
达子66618 小时前
用Vscode编译正点原子ESP32例程报错:ninja: error: loading ‘build.ninja‘: 系统找不到指定的文件
ide·vscode·编辑器
哦豁灬19 小时前
macOS 常用快捷键
macos
OK_boom20 小时前
visual studio 打开设计时刻抛出异常“未能加载文件或程序集...”的另一解决方法
ide·visual studio
小蕾Java21 小时前
【VSCode】Visual Studio Code 2024安装包及安装教程 (附所有版本下载)
ide·vscode·编辑器
亚林瓜子1 天前
在vscode中全选后,同时在每行行尾,开始多行编辑(Mac版)
ide·vscode·macos
一张假钞1 天前
Mac OS 常用快捷键
macos
小叮当⇔1 天前
PYcharm——获取天气
ide·python·pycharm