Gin路由组

Gin路由组

文章目录

接收任意请求的路由

  • 区别于以往的GET()函数只能处理一种请求,Any()函数可以处理各种函数

  • 语法: func (group *RouterGroup) Any(relativePath string, handlers ...HandlerFunc){}

  • 案例:

    go 复制代码
    //可以接收任意请求的函数
    	r.Any("/index", func(c *gin.Context) {
    		switch c.Request.Method { 
    		case http.MethodGet:
    			c.JSON(http.StatusOK, gin.H{
    				"status": "Get",
    			})
    		case http.MethodPost:
    			c.JSON(http.StatusOK, gin.H{
    				"status": "Post",
    			})
    		}
    	})

接收没有被定义的路由

  • 用于处理各种没有被定义的路由

  • 语法: func (engine *Engine) NoRoute(handlers ...HandlerFunc) {}

  • 案例:

    go 复制代码
    //用于处理各种没有定义的路由被用户访问后显示的内容
    	r.NoRoute(func(c *gin.Context) {
    		c.HTML(http.StatusOK, "Not.html", gin.H{
    			"email": "2585295809@qq.com",
    		})
    	})

路由组

  • 顾名思义,所谓路由组指的就是路由的组,也就是可以对路由进行分组管理的用法

  • 语法: func (group *RouterGroup) Group(relativePath string, handlers ...HandlerFunc) *RouterGroup {}

  • 案例:

    go 复制代码
    	//路由组(方便管理同一组的各种请求
    	indexGroup := r.Group("/index")
    	{
    		//  index/name
    		indexGroup.GET("/name", func(c *gin.Context) {
    			c.JSON(http.StatusOK, gin.H{
    				"status": "name ok",
    			})
    		})
    		// index/age
    		indexGroup.POST("/age", func(c *gin.Context) {
    			c.JSON(http.StatusOK, gin.H{
    				"status": "age ok",
    			})
    		})
    	}
  • 路由组嵌套(也就是在路由组中在添加一个路由组)

  • 案例:

    go 复制代码
    //路由组(方便管理同一组的各种请求
    	indexGroup := r.Group("/index")
    	{
    		//  index/name
    		indexGroup.GET("/name", func(c *gin.Context) {
    			c.JSON(http.StatusOK, gin.H{
    				"status": "name ok",
    			})
    		})
    		// index/age
    		indexGroup.POST("/age", func(c *gin.Context) {
    			c.JSON(http.StatusOK, gin.H{
    				"status": "age ok",
    			})
    		})
    		//嵌套路由组
    		ageGroup := indexGroup.Group("/age")
    		{
    			// /index/age/dog
    			ageGroup.GET("/dog", func(c *gin.Context) {
    				c.JSON(http.StatusOK, gin.H{
    					"status": "dog ok",
    				})
    			})
    		}
    	}

完整代码

go 复制代码
package main

import (
	"github.com/gin-gonic/gin"
	"log"
	"net/http"
)

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

	//解析静态文件
	r.LoadHTMLFiles("Not.html")

	//可以接收任意请求的函数
	r.Any("/index", func(c *gin.Context) {
		switch c.Request.Method {
		case http.MethodGet:
			c.JSON(http.StatusOK, gin.H{
				"status": "Get",
			})
		case http.MethodPost:
			c.JSON(http.StatusOK, gin.H{
				"status": "Post",
			})
		}
	})
	//用于处理各种没有定义的路由被用户访问后显示的内容
	r.NoRoute(func(c *gin.Context) {
		c.HTML(http.StatusOK, "Not.html", gin.H{
			"email": "2585295809@qq.com",
		})
	})

	//路由组(方便管理同一组的各种请求
	indexGroup := r.Group("/index")
	{
		//  index/name
		indexGroup.GET("/name", func(c *gin.Context) {
			c.JSON(http.StatusOK, gin.H{
				"status": "name ok",
			})
		})
		// index/age
		indexGroup.POST("/age", func(c *gin.Context) {
			c.JSON(http.StatusOK, gin.H{
				"status": "age ok",
			})
		})
		//嵌套路由组
		ageGroup := indexGroup.Group("/age")
		{
			// /index/age/dog
			ageGroup.GET("/dog", func(c *gin.Context) {
				c.JSON(http.StatusOK, gin.H{
					"status": "dog ok",
				})
			})
		}
	}

	err := r.Run(":8080")
	if err != nil {
		log.Println(err)
		return
	}
}
相关推荐
憧憬成为原神糕手25 分钟前
FFmpeg 音视频开发笔记(一):H.264 解码为 YUV
笔记·ffmpeg·音视频
爱听歌的周童鞋31 分钟前
Learn-Claude-Code | 笔记 | Collaboration | s11 Autonomous Agents
笔记·llm·agent·claude code·collaboration·autonomous
05候补工程师1 小时前
[线性代数] 判定线性相关性的“降维打击”:从基本定理到速通特殊法
经验分享·笔记·学习·线性代数·考研
sweetheart7-72 小时前
go/golang 入门学习笔记(Java/Python/C++转Go快速上手)
笔记·学习·golang·go语言
Byron__2 小时前
Java JVM核心知识点复习笔记
java·jvm·笔记
爱莉希雅&&&2 小时前
MySQL MGR + MySQL Router 高可用集群完整笔记(含手动配置 + Shell 接管双路线)
linux·数据库·笔记·mysql·mysqlrouter·mysqlshell
凉、介2 小时前
Armv8-A virtualization 笔记 (一)
c语言·笔记·学习·嵌入式·虚拟化·hypervisor
菜鸟的日志3 小时前
【嵌入系统】嵌入式学习笔记(一)
windows·笔记·嵌入式硬件·学习·ubuntu·操作系统
Hello_Embed5 小时前
串口硬件结构与三种编程方式
笔记·stm32·学习·ai编程
Ting.~5 小时前
软件设计师备考笔记【day5】-程序设计语言与语言处理程序
笔记