返回顶部
首页 > 资讯 > 后端开发 > GO >GolangGin局部和全局中间件使用详解
  • 461
分享到

GolangGin局部和全局中间件使用详解

摘要

目录中间件1. 全局中间件  2. 局部中间件中间件 中间件是放在客户端和服务端的中间。  当你的客户端对某个接口发起一个请求,但是在到达接口2之前,

中间件

中间件是放在客户端和服务端的中间。 

当你的客户端对某个接口发起一个请求,但是在到达接口2之前,这里是有一层中间件的处理。

一般常用的就是处理跨域,比如处理登入的验证token,接口返回的信息比较敏感,说白了就是需要做鉴权。其实也就是防止别人刷你接口,拿到你的数据。

也就是你必须携带正确的token,让中间件去做验证,做完验证之后再去处理这个接口的逻辑。

  • Gin框架允许开发者在处理请求的过程中,加入用户自己的钩子(Hook)函数(钩子函数其实就是中间件)。
  • 这个钩子函数就叫中间件,中间件适合处理一些公共的业务逻辑 ,比如 登录认证 、 权限校验 、数据分页、记录日志、耗时统计等(比如微服务架构,你要去统计每个服务的metrics,比如请求的耗时,请求的状态码,也可以通过这个中间件去实现)

1. 全局中间件  

全局中间件对所有的路由都生效。
如果先注册了路由器,我再去use这个中间件,发现这个中间件没有生效,这个是正常的,因为中间件是在路由之后,那么注册中间件就是失效的, 中间件一定要在路由之前注册。

HandlerFunc这个其实也就是接受上下文对匿名函数。 

type HandlerFunc func(*Context)

这里很像一个闭包的用法,我们只能在函数当中定义,但是没有办法去改变其一些变量。它不想让你去改变其一些配置,它只允许你写部分对实现。

import (
	"fmt"
	"GitHub.com/gin-Gonic/gin"
	"net/Http"
)
 
//全局中间件,对所有路由生效,必须在路由注册之前去use
func MiddleWare() gin.HandlerFunc {
	return func(c *gin.Context) { //返回一个匿名函数
		fmt.Println("我是一个中间件")
	}
}
 
func main() {
	r := gin.Default()
	r.Use(MiddleWare())
 
	r.GET("/hello", func(c *gin.Context) {
		fmt.Println("执行了get方法")
		c.String(http.StatusOK, "hello")
		c.JSON(http.StatusOK, gin.H{
			"msg":  "success",
			"data": "hello",
		})
	})
 
	r.Run(":8000")
}
[GIN-debug] Listening and serving HTTP on :8000
我是一个中间件
执行了get方法
[GIN] 2023/04/03 - 10:58:24 | 200 |      44.667µs |       127.0.0.1 | GET      "/hello"

这里可以看到中间件是先执行,中间件比路由的handler是先执行的。

2. 局部中间件

局部中间件就是对某个路由生效,这个就没有顺序了,因为它是跟着注册路由一起走的。

import ( 
"fmt" 
"github.com/gin-gonic/gin" 
)
 
 
func MiddleWare() gin.HandlerFunc { 
    return func(c *gin.Context) {
    fmt.Println("这里可以做一些身份验证等") 
 } 
}
 
func main() { 
    r := gin.Default() 
    // 首页无需验证 
    r.GET("/index", func(c *gin.Context) { 
    c.jsON(200, gin.H{"msg": "index 页面"}) 
})
 
    // home页需要用户登录才能查看 
    r.GET("/home", MiddleWare(), func(c *gin.Context) { 
        c.JSON(200, gin.H{"msg": "home 页面"}) 
    })
    r.Run() }

可以看到在返回日志之前去执行了这个中间件,这就是一个局部中间件对用法。(先去执行中间件再去执行handler,这个局部中间件只对上面的路由生效)

[GIN-debug] Listening and serving HTTP on :8000
[GIN] 2023/04/03 - 11:14:11 | 200 |      56.791µs |       127.0.0.1 | GET      "/index"
这里可以做一些身份验证
[GIN] 2023/04/03 - 11:14:17 | 200 |      31.291µs |       127.0.0.1 | GET      "/home"

某些中间件需要特殊处理的话,使用局部中间件就好了。

如果中间件有很多公用的方法,那么大部分情况就是全局的中间件,而不是局部的中间件。其实大部分使用场景都是使用全局中间件。

到此这篇关于golang Gin局部和全局中间件使用详解的文章就介绍到这了,更多相关Golang Gin局部和全局中间件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: GolangGin局部和全局中间件使用详解

本文链接: https://lsjlt.com/news/211659.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • GolangGin局部和全局中间件使用详解
    目录中间件1. 全局中间件  2. 局部中间件中间件 中间件是放在客户端和服务端的中间。  当你的客户端对某个接口发起一个请求,但是在到达接口2之前,...
    99+
    2023-05-18
    Golang Gin局部中间件使用 Golang Gin全局中间件使用 Golang Gin
  • Python 全局空间和局部空间
    目录一、空间和局部空间1、命名空间2、全局变量和局部变量3、作用域4、生命周期5、全局部函数和关键字的使用6、函数的嵌套二、LEGB原则三、总结一、空间和局部空间 1、命名空间 命名...
    99+
    2024-04-02
  • Vue中如何使用全局组件和局部组件
    Vue中如何使用全局组件和局部组件,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。组件 (Component) 是 Vue.js...
    99+
    2024-04-02
  • 解析Vue全局组件和局部组件
    Vue中组件分为两种: 全局组件 局部组件接下来我们看看两种组件的区别:一、使用范围:全局组件使用范围:可以在页面中任何位置使用局部组件使用范围:只能在定义它的el中使用,不能再其他位置使用,否则就无法生效二、定义组件的方法:全局组件:可以...
    99+
    2023-06-02
  • Python全局空间和局部空间是什么
    这篇“Python全局空间和局部空间是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python全局空间和局部空间是什么...
    99+
    2023-06-29
  • vuejs中使用mixin局部混入/全局混入的方法详解
    目录前言需求什么是mixin全局混入几个重要的疑问选项合并生命周期函数data数据冲突方法名冲突mixin的优缺点1.变量名来源不明确2. 多个mixins的生命周期会合并融合到一起...
    99+
    2024-04-02
  • VUE中怎么注册全局组件和局部组件
    这篇文章将为大家详细讲解有关VUE中怎么注册全局组件和局部组件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。全局组件第一步:在components文件夹下建...
    99+
    2024-04-02
  • vue.js全局组件和局部组件示例代码
    全局组件和局部组件 全局组件的定义的代码 <!DOCTYPE html> <html> <head> <meta charset="u...
    99+
    2022-12-10
    vue的全局组件 vue 局部组件 vue组件调用
  • SpringBoot实现设置全局和局部时间格式化
    目录前言解决问题1 全局设置(推荐)2 局部设置(不推荐)总结前言 在开发中,我们进行数据库查询日期类型的时候,往往不是我们想要的时间格式,比如下面的情况: 我数据库里面把这些日期相...
    99+
    2023-01-08
    SpringBoot 全局时间格式化 SpringBoot 局部时间格式化 SpringBoot时间格式化
  • 怎么理解python全局变量,局部变量和命名空间
    本篇内容介绍了“怎么理解python全局变量,局部变量和命名空间”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Python 使用全局和局部变...
    99+
    2023-06-22
  • 深入了解python全局变量,局部变量和命名空间
    目录函数中的全局和局部变量嵌套函数中的全局变量非局部变量Python 使用全局和局部变量的方式是特立独行的。虽然在许多或大多数其他编程语言中,如果未另行声明,变量将被视为全局变量,而...
    99+
    2024-04-02
  • vue全局组件和局部组件的写法介绍
    目录全局组件和局部组件写法全局组件引入写法局部组件引入写法vue全局/局部组件全局组件和局部组件写法 vue组件有两种,一种是全局组件,一种是局部组件。整个项目经常用到的用全局写法,...
    99+
    2024-04-02
  • VUE3学习教程之全局组件和局部组件
    目录1. 概述2. 全局组件2.1 不使用组件的写法2.2 使用组件2.3 组件中包含变量2.4 组件的复用2.5 组件中使用组件2.6 总结3. 局部组件3.1 局部组件的使用3....
    99+
    2024-04-02
  • c#局部变量怎么给全局使用
    在 c# 中,可以通过以下方法使局部变量作为全局变量使用:声明全局变量,使用 static 关键字。声明共享变量,使用 const 关键字。使用静态方法,该方法不依赖于实例。使用委托,将...
    99+
    2024-05-12
    c#
  • vue全局组件和局部组件的区别有哪些
    今天小编给大家分享一下vue全局组件和局部组件的区别有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。区别:1、使用范围不...
    99+
    2023-07-04
  • vue全局组件和局部组件的区别是什么
    本教程操作环境:windows7系统、vue3版,DELL G3电脑。Vue中组件分为两种: 全局组件局部组件接下来我们看看两种组件的区别:一、使用范围:全局组件使用范围:可以在页面中任何位置使用局部组件使用范围:只能在定义它的el中使用,...
    99+
    2023-05-14
    Vue
  • Python全局命名空间和局部命名空间有什么区别
    Python中的全局命名空间和局部命名空间都是用来存储变量和函数的地方,但它们之间有一些重要的区别。 全局命名空间是在整个程序中...
    99+
    2024-03-12
    Python
  • JavaScript局部和全局作用域怎么实现
    这篇文章主要介绍“JavaScript局部和全局作用域怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript局部和全局作用域怎么实现”文章能帮助...
    99+
    2024-04-02
  • SpringBoot如何实现设置全局和局部时间格式化
    本篇内容主要讲解“SpringBoot如何实现设置全局和局部时间格式化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot如何实现设置全局和局部时间格式化”吧!前言在开发中,我们进...
    99+
    2023-07-04
  • 如何使用use注册Vue全局组件和全局指令
    这篇文章主要介绍如何使用use注册Vue全局组件和全局指令,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Vue中的组件和指令分为局部组件、局部指令和全局组件、全局指令。对于注册有一定...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作