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

news2024/11/15 9:30:43

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

前言

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

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

154c7febc20b78ee7e19061b8a0696e6.png
1696330394289

路由分组

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

71fdc2716e002fef2aff918712422b08.png
1696330862506
// 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

8fc3be3365946a906c734eb371d0c8e6.png
1696330950278
  • 访问 admin组的index路由:http://localhost:8000/admin/index

763164cc4ac8012f18adf6cfcfb46983.png
1696330979558

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

路由文件抽离

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

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

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

AdminRouterInit 方法作为示例:

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 初始化路由
22e16c9325e769e185af9d3448489b6d.png
1696331972771
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")
}
测试效果
c5b3e2467bb4202ba0b3da6ddbc97f49.png
1696332022586

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1236118.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pygame播放视频并实现音视频同步

一、前言 在我接触pygame时最新的pygame已经不支持movie模块,这就导致在pygame播放视频变成一个问题,网上搜了下解决方案有两个: 一是使用opencv播放视频,再结合pygame.mixer来播放音频 二是使用moviepy播放视频,再…

iOS越狱检测总结

文章目录 前言检测越狱文件私有目录检测检测越狱软件检测系统目录是否变为链接动态库检测环境变量检测系统调用检测指令集调用检测其他方式检测 前言 在之前的文章中,已经带大家一起制作了一个屏蔽越狱检测的Tweak。本文就和大家一起学习整理一下iOS系统中有哪些越…

某60区块链安全之Call函数簇滥用实战一学习记录

区块链安全 文章目录 区块链安全Call函数簇滥用实战一实验目的实验环境实验原理实验内容实验过程 Call函数簇滥用实战一 实验目的 学会使用python3的web3模块 学会以太坊Delegatecall漏洞分析及利用 实验环境 Ubuntu18.04操作机 实验工具 python3 实验原理 call 外部调用…

Java项目实战《苍穹外卖》 三、登录功能

测测你是什么人格吧,地址: MBTI 16种人格测试官网 系列文章目录 苍穹外卖是黑马程序员2023年的Java实战项目,作为业余练手用,需要源码或者课程的可以找我,无偿分享 Java项目实战《苍穹外卖》 一、项目概述Java项目实战…

c语言上机作业:给函数增加防御机制

1.题目 2.思路 1.首先,我们可以知道,我们必须先要把z求出来,但这里需要注意的是x,y并不包含了全部的定义域,所以我们必须先判断是否输入的数据满足条件。而这,就是我们所需要突破的函数的防御,…

网络运维与网络安全 学习笔记2023.11.21

网络运维与网络安全 学习笔记 第二十二天 今日目标 端口隔离原理与配置、路由原理和配置、配置多路由器静态路由 配置默认路由、VLAN间通信之路由器 端口隔离原理与配置 端口隔离概述 实现报文之间的2层隔离,除了使用VLAN技术以后,还可以使用端口隔…

yolov7训练数据集详细流程bike-car-person

一、准备深度学习环境 下载yolov7代码 下载完成解压放在自己的主目录 命名yolov7-4 二、 准备自己的数据集 1.进入主目录 2.进入data目录下把你的xml文件夹命名为Annotations,把你的存放图片文件夹命名为images 3.分别新建ImageSets、imagtest(里面…

Vue3 相较 Vue2 做的重大更新

双向数据绑定方法 vue2 Object.definePropertie() vue3 Proxy VDOM 性能瓶颈突破 做了静态标记,静态内容不会去再对比 通过位运算对比得出其的静态标记情况 Fragments 允许组件多个根节点 vue3 会虚拟一个根节点,但实际不会渲染虚拟的节点 Tree-S…

阿里云 E-MapReduce 全面开启 Serverless 时代

作者:李钰 - 阿里云资深技术专家、EMR 负责人 EMR 2.0 平台 阿里云正式发布云原生开源大数据平台EMR 2.0已历经一年时间,如今EMR 2.0全新平台在生产上已经全面落地,资源占比超过60%。EMR 2.0平台之所以在生产上这么快落地,源于其…

激发创新,助力研究:CogVLM,强大且开源的视觉语言模型亮相

项目设计集合(人工智能方向):助力新人快速实战掌握技能、自主完成项目设计升级,提升自身的硬实力(不仅限NLP、知识图谱、计算机视觉等领域):汇总有意义的项目设计集合,助力新人快速实…

Prometheus监控mysql nginx tomcat 黑盒监控

部署consul_exporter https://github.com/prometheus/consul_exporter/releases/download/v0.9.0/consul_exporter-0.9.0.linux-amd64.tar.gz 注册 ootubuntu20:~# cat consul_export.json rootubuntu20:~# cat consul_export.json {"services": [{"id"…

51单片机的智能浇花系统【含proteus仿真+程序+报告+原理图】

1、主要功能 该系统由AT89C51单片机LCD1602显示模块DHT11温湿度模块DS1302时间模块继电器驱动水泵模块光敏传感器等模块构成。适用于智能浇花、自动浇花、智能盆栽等相似项目。 可实现基本功能: 1、LCD1602实时显示北京时间、土壤温湿度、光照强度等信息 2、DHT11采集温湿度信…

同为科技(TOWE)智能机柜PDU助力上海华为数据中心完善机房末端配电

智能时代加速而来,最大的需求是算力,最关键的基础设施是数据中心。作为一家在信息通信领域拥有多年经验和技术积累的公司,华为在全国多个地区都设有数据中心,如知名的贵州贵安华为云全球总部、内蒙古乌兰察布华为数据中心等&#…

Apahce虚拟主机配置演示

在企业的真实环境中,一台WEB服务器发布单个网站会非常浪费资源,所以一台WEB服务器一般都会发布多个网站,少则3-5个,多个10-20个网站。在一台服务器上发布多网站,也称之为部署多个虚拟主机。 WEB虚拟机主机配置方法主要…

『 Linux 』使用fork函数创建进程与进程状态的查看

文章目录 🖥️ 前言 🖥️🖥️ 通过系统调用获取进程标识符 🖥️💻 进程标识符PID💻 父进程标识符PPID 🖥️ 通过系统调用创建子进程 fork() 🖥️💻 那么为什么在fork()函…

存储日志数据并满足安全要求

日志数据是包含有关网络中发生的事件的记录的重要信息,日志数据对于监控网络和了解网络活动、用户操作及其动机至关重要。 由于网络中的每个设备都会生成日志,因此收集的数据量巨大,管理和存储所有这些数据成为一项挑战,日志归档…

双亲委派机制与类加载器的自定义

类加载器的作用与位置 在java字节码文件交给JVM运行时,需要类加载器子系统进行加载,类加载器子系统主要分为 三个阶段加载 链接 初始化具体可以看我前两篇博客这里就不再赘述 加载阶段主要有三个加载器引导类加载器 扩展类加载器 系统类加载器完成 他…

pytorch中.to(device) 和.cuda()的区别

在PyTorch中,使用GPU加速可以显著提高模型的训练速度。在将数据传递给GPU之前,需要将其转换为GPU可用的格式。 函数原型如下: def cuda(self: T, device: Optional[Union[int, device]] None) -> T:return self._apply(lambda t: t.cuda…

六、Big Data Tools安装

1、安装 在Jetbrains的任意一款产品中,均可安装Big Data Tools这个插件。 2、示例 下面以DadaGrip为例: (1)打开插件中心 (2)搜索Big Data Tools,下载 3、链接hdfs (1&#xff0…

Java 代码 格式化插件

Java代码 格式化插件 文章目录 Java代码 格式化插件一. 前言1.1 官网1.2 概念1.3 格式化更变规则 二. 使用2.1 插件添加2.2 使用 一. 前言 1.1 官网 spring-javaformat-maven-plugin 1.2 概念 一组可应用于任何 Java 项目以提供一致的“Spring”风格的插件。该套件目前包括…