gin:包管理和路由拆分

1 篇文章 0 订阅

前言

gin的路由拆分,实际就是路由模块化分组。使用路由拆分的目的在于提高代码的可读性。在简单的案例中,可以将代码都写入到一个文件中,或者几个文件中。随着项目功能逐渐加多,又没有合理的分层分组,可读性会因代码增加而越来越低。路由拆分实际也是一种代码的模块化管理方式(主要对于路由的管理)。

包管理

go中一个文件夹为一个包。项目根目录为main,main包是无法给同一项目下的其他包引用的

这里使用demo作为项目名

文件内package的命名

如果是项目根目录,使用main,其余的文件使用所在的那个文件夹名称,不能写入完整的目录层级。例如/service/blogdir/blog.go文件(第一个斜杠表示项目根目录即main目录),package使用package blogdir

引用的起点

引用的起点是从项目名开始,按目录层级写到功能所在文件夹。例如/service/blogdir/blog.go,blog.go中有一个SayHello()方法。

引用使用:

import("demo/service/blog")

// 略... 
blog.SayHello()
// 略... 

gin路由拆分

没有规定一定使用哪种分层,每种合适路由拆分方式都有它的适用场景。我这里使用用gva(gin-vue-admin)的路由划分思路。

目录结构如下

请添加图片描述

所有的enter.go作用是将本目录下的所有包整合到enter.go中,以便外部引用。

添加一个路由

  1. api/v1中定义一个处理方法,传入的参数为gin.Context(为了方便这里就不加入enter中)

    //  \api\v1\demo.go
    package v1
    
    import (
    	"fmt"
    	"github.com/gin-gonic/gin"
    )
    type DemoController struct {
    }
    
    func (dc *DemoController) Demo(c *gin.Context) {
    	fmt.Println("demo")
    }
    
  2. 定义一个路由,添加到enter

    // \router\example\demo.go
    package example
    
    import (
    	v1 "github.com/flipped-aurora/gin-vue-admin/server/api/v1"
    	"github.com/gin-gonic/gin"
    )
    
    type DemoRouter struct{}
    
    
    func (d *DemoRouter) InitDemoRouter(r *gin.RouterGroup) {
    	// 可以添加组和中间件(r.Use())
    	r.Group("demo")
    	DemoController := &v1.DemoController{}
    
    	// 绑定路由和处理方法 /demo/demo01
    	r.GET("demo01",DemoController.Demo)
    	r.POST("demo02",DemoController.Demo)
        // ...
    }
    
    
  3. 将绑定好的路由组添加到当前enter.go文件中,目的是为了整合当前文件夹中的所有路由

// router\example\enter.go

请添加图片描述

  1. (按需)如果是新的文件夹,需要再上一层,找到enter文件,加新文件中的enter.go中的结构体加入其中。

请添加图片描述

  1. 最后在初始化的时候注册所有路由、绑定中间件等

    // initialize\router.go
    

请添加图片描述

  1. 启动项目,在浏览器中访问{地址}/demo/demo01,控制台会得到:

    demo
    

    说明路由生效了。

通过继承减少方法的层级

刚定义的路由包裹的层级是这样的:RouterGroup.RouterGroup.DemoRouter.InitDemoRouter()

前两个RouterGroup是上两级目录下的enter.go路由整合文件。

请添加图片描述请添加图片描述

/router/example) RouterGroup中继承了当前文件夹中的所有类。所以在上一级(/router下)的RouterGroup,通过Example属性就可以直接访问到/router/example下的所有路由初始化方法。这样就减少了多层级的方法访问。

gva的拆分是否过于麻烦?

在写这篇博客前我在想gva的路由划分实在太麻烦,多个enter.go文件叠加让人觉得眼花缭乱。如果在router文件夹下只使用一个go文件来整合路由,路由分组再另外使用一个文件夹划分,层级上就只有一级。这样好像更加的简洁。如下:
请添加图片描述

看起来是简洁了, 但是当路由的数量增多后,一个文件n行的初始化;文件内容太多,还是要面临继续拆分的问题,最终可能还是回到了gva这种拆分方式.

开发中没有银弹

总结

路由拆分实际是一种代码的模块化管理方式。每种合理的拆分的方式都有其适用的场景。选择适合的拆分方式,提高项目的可读性

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jayLog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值