首页 > 其他分享 >Gin路由分组

Gin路由分组

时间:2024-01-17 11:16:21浏览次数:27  
标签:200 String GET 分组 func gin Context Gin 路由

Gin路由分组

1 假设我们需要开发的接口有这些

package main

import (
	"net/http"

	"github.com/gin-gonic/gin"
)
func main() {
	r := gin.Default()

	r.GET("/", func(c *gin.Context) {
		c.String(200, "首页")
	})

	r.GET("/news", func(c *gin.Context) {
		c.String(200, "新闻")
	})

	r.GET("/api", func(c *gin.Context) {
		c.String(200, "我是一个api接口")
	})
	r.GET("/api/userlist", func(c *gin.Context) {
		c.String(200, "我是一个api接口")
	})
	r.GET("/api/plist", func(c *gin.Context) {
		c.String(200, "我是一个api接口")
	})
	r.GET("/api/cart", func(c *gin.Context) {
		c.String(200, "我是一个api接口")
	})

	r.GET("/admin", func(c *gin.Context) {
		c.String(200, "后台首页")
	})
	r.GET("/admin/user", func(c *gin.Context) {
		c.String(200, "用户列表")
	})
	r.GET("/admin/user/add", func(c *gin.Context) {
		c.String(200, "增加用户")
	})
	r.GET("/admin/user/edit", func(c *gin.Context) {
		c.String(200, "修改用户")
	})
	r.GET("/admin/article", func(c *gin.Context) {
		c.String(200, "新闻列表")
	})

	r.Run(":8000")
}

/*
	这样的路由对于开发人员来说维护起来是非常困难的
	这时我们就需要使用到路由组
*/

2 使用Group分组

package main

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

func main() {
	r := gin.Default()

	defaultRouters := r.Group("/")
	{
		defaultRouters.GET("/", func(c *gin.Context) {
			c.String(200, "首页")
		})

		defaultRouters.GET("/news", func(c *gin.Context) {
			c.String(200, "新闻")
		})
	}

	apiRouters := r.Group("/api")
	{
		apiRouters.GET("/", func(c *gin.Context) {
			c.String(200, "我是一个api接口")
		})
		apiRouters.GET("/userlist", func(c *gin.Context) {
			c.String(200, "我是一个api接口userlist")
		})
		apiRouters.GET("/plist", func(c *gin.Context) {
			c.String(200, "我是一个api接口plist")
		})
		apiRouters.GET("/cart", func(c *gin.Context) {
			c.String(200, "我是一个api接口cart")
		})
	}

	adminRouters := r.Group("/admin")
	{
		adminRouters.GET("/", func(c *gin.Context) {
			c.String(200, "后台首页")
		})
		adminRouters.GET("/user", func(c *gin.Context) {
			c.String(200, "用户列表")
		})
		adminRouters.GET("/user/add", func(c *gin.Context) {
			c.String(200, "增加用户")
		})
		adminRouters.GET("/user/edit", func(c *gin.Context) {
			c.String(200, "修改用户")
		})
		adminRouters.GET("/article", func(c *gin.Context) {
			c.String(200, "新闻列表")
		})
	}

	r.Run(":8000")
}

3 路由分离

首先我们创建一个routers文件夹,用于存放我们的路由,然后创建3个go文件按模块分别存储路由信息

pFFtBKs.png

接下来就开始分离路由,将相同模块的路由放一起,通过向函数中传递一个 r 的指针进行路由注册

adminRouters.go

package routers

import (
	"github.com/gin-gonic/gin"
)

func AdminRoutersInit(r *gin.Engine) {
	adminRouters := r.Group("/admin")
	{
		adminRouters.GET("/", func(c *gin.Context) {
			c.String(200, "后台首页")
		})
		adminRouters.GET("/user", func(c *gin.Context) {
			c.String(200, "用户列表")
		})
		adminRouters.GET("/user/add", func(c *gin.Context) {
			c.String(200, "增加用户")
		})
		adminRouters.GET("/user/edit", func(c *gin.Context) {
			c.String(200, "修改用户")
		})
		adminRouters.GET("/article", func(c *gin.Context) {
			c.String(200, "新闻列表")
		})
	}
}

apiRouters.go

package routers

import "github.com/gin-gonic/gin"

func ApiRoutersInit(r *gin.Engine) {
	apiRouters := r.Group("/api")
	{
		apiRouters.GET("/", func(c *gin.Context) {
			c.String(200, "我是一个api接口")
		})
		apiRouters.GET("/userlist", func(c *gin.Context) {
			c.String(200, "我是一个api接口userlist")
		})
		apiRouters.GET("/plist", func(c *gin.Context) {
			c.String(200, "我是一个api接口plist")
		})
		apiRouters.GET("/cart", func(c *gin.Context) {
			c.String(200, "我是一个api接口cart")
		})
	}
}

defaultRouters.go

package routers

import "github.com/gin-gonic/gin"

func DefaultRoutersInit(r *gin.Engine) {
	defaultRouters := r.Group("/")
	{
		defaultRouters.GET("/", func(c *gin.Context) {
			c.String(200, "首页")
		})

		defaultRouters.GET("/news", func(c *gin.Context) {
			c.String(200, "新闻")
		})
	}
}

main.go

package main

import (
	"awesomeProject/gin/routers"
	"net/http"
	"github.com/gin-gonic/gin"
)
func main() {
	r := gin.Default()
	routers.AdminRoutersInit(r)
	routers.ApiRoutersInit(r)
	routers.DefaultRoutersInit(r)
	r.Run(":8000")
}

4 小结

/*
	目前我们已经可以将路由根据模块功能进行划分出来,区分开,方便后期的维护管理
	但是我们只想要路由文件中只有路由的配置,不想要业务逻辑的实现,那我们还得将路由和业务逻辑进行拆分
	需要将func单独写到一个文件下面方便管理,这些内容下一篇文章将进行解决
	
	如果熟悉 python 的 Django的话应该是非常容易理解的
*/

标签:200,String,GET,分组,func,gin,Context,Gin,路由
From: https://www.cnblogs.com/chunyouqudongwuyuan/p/17969482

相关文章

  • Gin GET POST 以及获取GET POST传值
    GinGETPOST以及获取GETPOST传值1Get请求传值packagemainimport( "net/http" "github.com/gin-gonic/gin")funcmain(){ r:=gin.Default() //http://127.0.0.1:8000/query?username=111&age=10&sex= //{"age":"10&......
  • Gin 控制器的继承,自定义方法
    Gin控制器的继承,自定义方法1我们想直接获取到int类型的数据怎么办/* 当我们获取Get参数时都时获取到的都是string类型,有时候我们想直接获取到int类型,我们就需要转换,如果需要转换的地方多了也会很麻烦, 那我们可以怎么办 解决办法很简单,我们可以写一个baseController来实......
  • Gin控制器分离
    Gin控制器分离1函数式/* apiRouters.GET("/",func(c*gin.Context){ c.String(200,"我是一个api接口") }) 这样的一个路由注册我们发现,后面都跟了一个匿名函数,那我们将这个匿名函数全部取出来放在一个固定的地方就可以实现路由和业务逻辑的分离了*/1.1将adminRou......
  • Gin单文件上传以及多文件上传
    Gin单文件上传以及多文件上传1单文件上传funcmain(){router:=gin.Default()//为multipartforms设置较低的内存限制(默认是32MiB)//router.MaxMultipartMemory=8<<20//8MiBrouter.POST("/upload",func(c*gin.Context){file......
  • Gin中间件
    Gin中间件1中间件简介/* Gin框架允许开发者在处理请求的过程中,加入用户自己的钩子(Hook)函数。这个钩子函数就叫中间件,中间件适合处理一些公共的业务逻辑,比如登录认证、权限校验、数据分页、记录日志、耗时统计等。*/在gin中的Default的方法中已经有两个中间件了://Defaul......
  • Gin 文件上传 按照日期存储
    Gin文件上传按照日期存储1实现步骤/* 1.获取上传的文件 2.获取后缀名判断类型是否正确.jpg.png.gif.jpeg 3.创建图片保存目录static/upload/20240101 4.生成文件名称和文件保存的目录 5.保存*/2代码//获取当前的日期funcGetDay()string{ template:="......
  • Gin中的Session
    Gin中的Session1Session简单介绍session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而session保存在服务器上。2Session的工作流程当客户端浏览器第一次访问服务器并发送请求时,服务器端会创建一个session对象,生成一个类似于key,value的键值对,然后将va......
  • Gin中的Cookie
    Gin中的Cookie1Cookie简介/* ●HTTP是无状态协议。简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页面,服务器无法认识到这是同一个浏览器在访问同一个网站。每一次的访问,都是没有任何关系的。如果我们要实现多个页面之间共享数据的话我们就可以使用Cookie或者Sessio......
  • GIn入门
    Gin入门1.Gin安装goget-ugithub.com/gin-gonic/gin2.将gin引入到代码中:import"github.com/gin-gonic/gin"2.1(可选)如果使用诸如http.StatusOK之类的常量,则需要引入net/http包:import"net/http"2.2初始化gomodgomodinit/*生成go.mod文件,此命令会在当......
  • Vue学习计划-Vue3--核心语法(六)路由
    1.路由【对路由的理解】【基本切换效果】Vue3中要使用vue-router的最新版本,目前是4版本路由配置文件代码如下://创建一个路由器,并暴露出去//第一步:引入createRouterimport{createRouter,createWebHistory}from'vue-router'//引入一个一个可能要呈现组件......