【Go】Gin从入门到精通—搭建MVC项目结构学习路由配置
一、前言
在前面的章节中,我们学习了Gin框架的本地搭建过程。
通过我们的学习,我们知道了,Gin框架是不指定项目的自由的框架。
但是在实际生产项目中,常用的配置文件、路由文件和MVC架构,还是必须的。
二、什么是路由
从网络的角度看,路由(routing)是指分组从源到目的地时,决定端到端路径的网络范围的进程。路由工作在OSI参考模型第三层——网络层的数据包转发设备。路由器通过转发数据包来实现网络互连。虽然路由器可以支持多种协议(如TCP/IP、IPX/SPX、AppleTalk等协议),但是在我国绝大多数路由器运行TCP/IP协议。
在框架的角度看,路由对应的是URL访问对应指向的项目内部方法。
路径对应的方法并不是直接绑定的,而是通过框架内部的路由组件进行绑定,这样做的好处是非常自由,我们不必因为要修改对外的访问路径去修改已经写好的控制器的名称。
所以,认识一个框架,认识路由组件的配置是非常重要的。
三、什么是MVC
广义看MVC,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。其中,View的定义比较清晰,就是用户界面。
一般在创建项目目录中,我们把项目文件夹分为
- controller 控制器,实现业务逻辑
- model 模型,实现数据操作
- view 视图,渲染用户界面
四、认识Gin的路由组件
1. 基础方式
router := gin.Default()
router.GET("/someGet", getting)
router.POST("/somePost", posting)
router.PUT("/somePut", putting)
router.DELETE("/someDelete", deleting)
router.PATCH("/somePatch", patching)
router.HEAD("/someHead", head)
router.OPTIONS("/someOptions", options)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
这是一个非常简单的事例,我们通过gin.Default()
得到了一个gin 路由。
组件可以通过这样的方式注册路由,并指定访问方式,Gin路由支持常见的访问方式。
2. 路由分组
路由分组解决的是诸如接口版本过多,便于区分,以及不同业务模块下的配置。
router := gin.Default()
// 简单的路由组: v1
v1 := router.Group("/v1")
{
v1.POST("/login", loginEndpoint)
v1.POST("/submit", submitEndpoint)
v1.POST("/read", readEndpoint)
}
// 简单的路由组: v2
v2 := router.Group("/v2")
{
v2.POST("/login", loginEndpoint)
v2.POST("/submit", submitEndpoint)
v2.POST("/read", readEndpoint)
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
对应上面事例的访问路径为
/v1/login
/v1/submit
/v1/read
/v2/login
/v2/submit
/v2/read
虽然指向的是同一个方法,但是在实际项目中,我们可以指向不同的方法。
五、视图渲染
Gin中的视图通过gin.Context..HTML
实现。
简单案例如下
router := gin.Default()
router.LoadHTMLGlob("templates/*")
router.GET("/index", func(c *gin.Context) {
c.HTML(http.StatusOK, "index.tmpl", gin.H{
"title": "Main website",
})
})
router.Run(":8080")
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
视图文件为
<html>
<h1>
{{ .title }}
</h1>
</html>
- 1
- 2
- 3
- 4
- 5
文章来源: coderfix.blog.csdn.net,作者:小雨青年,版权归原作者所有,如需转载,请联系作者。
原文链接:coderfix.blog.csdn.net/article/details/120634247
- 点赞
- 收藏
- 关注作者
评论(0)