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

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 routesimport ("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 mainimport ("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.mzph.cn/news/159385.shtml

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

相关文章

Vue3+ts学习笔记1

//父组件 <script setup lang"ts"> import Child from ./components/Child.vueconst fnInFather (msg:any) > {console.log("父组件的 fnInFather 函数触发了,拿到了后面的消息>", msg.value) } </script><template><div>&…

剧情继续:马斯克曝出OpenAI前员工举报信,董事会与奥特曼谈判回归

丰色 发自 凹非寺 量子位 | 公众号QbitAI 经过4天的极限拉扯、反转再反转&#xff0c;奥特曼有可能重新回归了。 据知情人士透露&#xff0c;OpenAI董事会正与奥特曼进行一场“富有成效”的新谈判。 如果奥特曼回到OpenAI&#xff0c;他将继续担任CEO。 与此同时&#xff0c…

【开源】基于JAVA的音乐偏好度推荐系统

项目编号&#xff1a; S 012 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S012&#xff0c;文末获取源码。} 项目编号&#xff1a;S012&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.1.1 音乐档案模块2.1…

Unsupervised Condition GAN

Unsupervised Condition GAN主要有两种做法&#xff1a; Direct Transformation 直接输入domain X图片&#xff0c;经过Generator后生成对应的domain Y的图像。这种转化input和output不能够差太多。通常只能实现较小的转化&#xff0c;比如改变颜色等。 Projection to Commo…

pyinstaller打包生成的.spec文件解析

PyInstaller是一个用于将Python程序打包为可执行文件的工具。它的.spec文件是用来配置打包过程的脚本文件。 .spec文件是一个Python脚本&#xff0c;用于指定PyInstaller如何处理源代码、依赖项、资源文件等。它包含了一系列的参数和选项&#xff0c;用于控制打包的行为和生成…

【C++】:STL中的string类的增删查改的底层模拟实现

本篇博客仅仅实现存储字符(串)的string 同时由于Cstring库设计的不合理&#xff0c;我仅实现一些最常见的增删查改接口 接下来给出的接口都是基于以下框架&#xff1a; private:char* _str;//思考如何不用constsize_t _size;size_t _capacity;//这样写可以const static size_t…

【Windows 常用工具系列 13 -- Confluence 如何快速输入代码块 code block】

文章目录 Confluence 如何快速输入代码块方法二 Confluence 如何快速输入代码块 在使用使用 confluence 进行文档编辑时&#xff0c;有时需要贴上部分代码&#xff0c;但是直接贴代码在 confluence上&#xff0c;显示效果不是太好看&#xff0c;所以confluence 给我们提供了符…

SpringBoot启动后自动打开浏览器访问项目

更简单的一个方法 Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " url); Springboot项目启动后自动打开浏览器访问(超实用)_浏览器访问springboot项目-CSDN博客 Springboot项目启动后自动打开浏览器访问 1、在Springboot项目中每次启动完项…

PostgreSQL (Hologres) 日期生成

PostgreSQL 生成指定日期下一个月的日期 &#xff08;在Hologres中&#xff0c;不支持递归查询&#xff09; SELECTto_char(T, YYYYMMDD)::int4 AS date_int,date(T) AS date_str,date_part(year, T)::int4 AS year_int,date_part(month, T)::int4 AS month_int,date_part(da…

图像处理Scharr 算子

Scharr算子是用于图像边缘检测的一种算子&#xff0c;它类似于Sobel算子&#xff0c;但是对边缘的响应更加强烈。它可以用来检测图像中的边缘、轮廓等特征。 原理&#xff1a; Scharr算子是一种卷积核&#xff08;也称为卷积模板&#xff09;&#xff0c;用于计算图像的梯度。…

前端使用JWT时无法获取Authorization请求头

是因为后端没有解决跨域问题&#xff1a; 补充下面的代码即可 response.setHeader("Access-Control-Expose-Headers", "Authorization");

1.8w 字详解 SQL 优化

来源&#xff1a;捡田螺的小男孩 1、MySQL的基本架构 2、SQL优化 3、explain执行计划常用关键字详解 很多朋友在做数据分析时&#xff0c;分析两分钟&#xff0c;跑数两小时&#xff1f; 在使用SQL过程中不仅要关注数据结果&#xff0c;同样要注意SQL语句的执行效率。 本文…

python枚举类似java枚举中的写法

类似于java这种定义枚举变量的方式&#xff0c;一个变量(实则就是一个枚举对象变量)可以写入多个参数&#xff1a; package test;public enum TestEnum {SUCCESS("0000","成功");TestEnum(String code, String msg) {this.code code;this.msg msg;}priv…

国内怎么投资黄金,炒黄金有哪些好方法?

随着我国综合实力的不断强大&#xff0c;投资市场的发展也日臻完善&#xff0c;现已成为了国际黄金市场的重要组成部分&#xff0c;人们想要精准判断金市走向&#xff0c;就离不开对我国经济等信息的仔细分析。而想要有效提升盈利概率&#xff0c;人们还需要掌握国内黄金投资的…

用css实现原生form中radio单选框和input输入框的hover样式以及聚焦focus的样式

一.问题描述&#xff1a;用css实现原生form中radio单选框和input的hover已经focus的样式 在实际的开发中&#xff0c;一般公司ui都会给效果图&#xff0c;比如单选按钮radio样式&#xff0c;input输入框hover的时候样式&#xff0c;以及focus的时候样式&#xff0c;等等&#…

【python学习】基础篇-常用模块-hmac模块:基于密钥的消息认证码(HMAC)算法,用于验证消息的完整性和身份认证

Python中的hmac模块提供了基于密钥的消息认证码(HMAC)算法&#xff0c;用于验证消息的完整性和身份认证。 它可以用于保护敏感数据&#xff0c;例如密码、API密钥等。 以下是hmac模块中一些常见函数的用法&#xff1a; 在实际应用中&#xff0c;您可能需要根据具体需求调整密钥…

Ubuntu安装PCAN-View

目录 一. Hardware 二. Software 2.1 安装驱动 2.2 安装PCAN-View QA 本文介绍如何安装linux版的PCAN-View。 PCAN-View&#xff1a;用来抓包分析CAN/CANFD报文。Hardware: PEAK-System Linux generic #37~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon Oct 9 15:34:04 UTC 2…

Java 最简单的实现 AES 加密和解密

AES简介 AES&#xff08;Advanced Encryption Standard&#xff09;高级加密标准&#xff0c;是一种被广泛使用的对称加密算法&#xff0c;用于加密和解密数据。它曾经是美国政府的一个机密标准&#xff0c;但现在已成为公开的加密算法&#xff0c;并被广泛使用于商业、政府及…

第四代智能井盖传感器:智能井盖位移监测

当城市道路上的井盖出现异常时&#xff0c;可能会导致突发的交通事故或人员受伤事件。而传统的井盖监测往往依靠人力进行巡查&#xff0c;这种方式可能会因为监测不及时或不准确而带来问题。但是现在有了智能井盖传感器&#xff0c;它们成为了城市地下生命线的守护者。这种智能…