当前位置: 首页 > news >正文

dz网站模板 首页显示内容国际购物平台

dz网站模板 首页显示内容,国际购物平台,企业平台建设,网站建设对企业的意义在gin框架中#xff0c;我们可以通过2种方式创建自定义中间件#xff1a; 1. 直接定义一个类型为 func(*gin.Context)的函数或者方法 这种方式是我们常用的方式#xff0c;也就是定义一个参数为*gin.Context的函数或者方法。定义的方法就是创建一个 参数类型为 gin.Handler…在gin框架中我们可以通过2种方式创建自定义中间件 1. 直接定义一个类型为 func(*gin.Context)的函数或者方法 这种方式是我们常用的方式也就是定义一个参数为*gin.Context的函数或者方法。定义的方法就是创建一个 参数类型为 gin.HandlerFunc 【 他的原型定义为 type HandlerFunc func(*Context) 】的中间件如 func XxxFoo(c *gin.Context) {} 注意 虽然这种方式定义的中间件和入参和路由处理函数的定义是一样的 但是他们的用途和业务处理方式是有区别的 在中间件中我们可以通过  c.Next() 方法继续后面的请求 通过 c.Abort()方法终止后续的请求 而路由处理函数中我们是不会应用这2个方法的。 示例 下面定义了一个日志记录的中间件 我们在这个中间件中还启动了一个协程来处理费时的任务注意gin框架在中间件中开启协程 是使用的上下文是拷贝的当前上下文 func OperLogMiddleware(c *gin.Context) {// 请求操作不做记录if c.Request.Method http.MethodGet {c.Next() // 继续后续请求return // 退出当前函数}// 创建在 goroutine 中使用ginx.Context对象的的副本cCp : c.Copy()go func() {// 主这里 在中间件中使用 Context对象的拷贝if cCp.Request.Method POST {// do something}}()// 如果异常不为空if err:c.Err();err!nil{c.Abort() // 终止后续请求 }else{// 继续后面的请求c.Next()}}使用方法:  r.Use(OperLogMiddleware)  // 注意这里只需要指定我们定义的中间件函数名称即可。 func main() {r : gin.New()r.Use(OperLogMiddleware)r.GET(/test, func(c *gin.Context) {example : c.MustGet(example).(string)// 打印12345log.Println(example)})// 监听并在 0.0.0.0:8080 上启动服务r.Run(:8080) } 2. 闭包函数方式定义中间件即自定义一个函数并将这个函数的返回类型设置为 func(*gin.Context) 即 gin.HandlerFunc 这种方式的优点在于我们可以在使用中间件的时候给这个中间件传递一些自定义的参数 如我们在不同模块中使用中间件是可以把模块名称传递进去等。定义方式如下 // 注意这里的函数入参可以随意定义 返回必须是gin.HandlerFunc func XxxFoo(x1,x2 string) gin.HandlerFunc {     // 这里直接返回函数func(c *gin.Context)     return func(c *gin.Context) {         // gin 中间件的处理逻辑在这里     } } 示例 我们还是上面的示例改写为闭包函数方式来定义中间件。 // 闭包函数方式定义中间件 // 注意这里的这个闭包函数的入参可以随意,你要怎么定义都可以,但是返回必须是gin.HandlerFunc类型,即func(c *gin.Context)类型 func OperLogClosure(moduleName string) gin.HandlerFunc {// 定义处理函数 gin.HandlerFuncvar handlerFn func(c *gin.Context) {// 请求操作不做记录if c.Request.Method http.MethodGet {c.Next() // 继续后续请求return // 退出当前函数}// 创建在 goroutine 中使用ginx.Context对象的的副本cCp : c.Copy()go func() {// 主这里 在中间件中使用 Context对象的拷贝if cCp.Request.Method POST {// do something}}()// 如果异常不为空if err : c.Err(); err ! nil {c.Abort() // 终止后续请求} else {// 继续后面的请求c.Next()}}// 返回这个函数 , 当然我们也可以直接 return 这个函数的定义return handlerFn } 使用方法:  r.Use(OperLogClosure(system))  // 注意这里在Use的时候是直接执行我们定义的闭包函数 func main() {r : gin.New()// 注意这里Use的参数 我们在这里直接执行我们定义的闭包函数r.Use(OperLogClosure(system))r.GET(/test, func(c *gin.Context) {example : c.MustGet(example).(string)// 打印12345log.Println(example)})// 监听并在 0.0.0.0:8080 上启动服务r.Run(:8080) } 总结gin框架中的中间件实际上也就是一个类型为 func(c *gin.Context) 的函数或者方法定义即可 我们可以采用直接定义函数的方式或者采用闭包方式来定义中间件相比之下闭包方式拥有更好的灵活性可以随意给我们的中间件传递初始参数 而普通方式定义的中间件要传递参数就只能是使用全局的上下文了。 同时我们还需要知道gin框架的中间件中的Abort方法和Next方法的使用以及如何中断当前请求后继续后续请求等。
http://www.hkea.cn/news/14284894/

相关文章:

  • 三亚网站开发如何能查到百度搜索排名
  • 电商网站的多选菜单插件wordpress模版推荐
  • 大连六兄弟网站建设网站开发的关键
  • 浙江做网站公司有哪些网站模板版权
  • 石家庄新闻综合频道节目表百度seo插件
  • c语言可以做网站吗东莞app软件开发解决方案
  • 物业管理网站开发背景网页美工设计主要从哪些方面设计
  • 国内网站设计经典案例网络营销推广方案设计
  • 360做的网站网站建设及优化 赣icp
  • 做电脑桌面网站网站子目录安装dedecms导致网页布局混乱的解决方法
  • 商务服饰网站建设wordpress密码文件夹
  • 网站建设业务好跑吗网站建设 需求确认书
  • 用网盘做网站六安住房和城乡建设部网站
  • 2019做seo网站帝国cms 网站地图
  • 网站推广技巧有哪些?全网营销推广联系方式
  • 换空间网站备案政务网站建设具体指导意见
  • 企业网站建设新站销售管理系统实验报告
  • 产品做网站宣城市网站集约化建设
  • 建设工程鲁班奖公示网站合肥网站优化排名推广
  • 企业网站关键词应如何优化windows优化大师是电脑自带的吗
  • 祥网站建设wordpress百度实时推送
  • 网络公司要求做网站工商网监营销网络怎么写
  • 网站规划书500字云呼叫中心系统 免费
  • 在线做拓扑图的网站营销型网站建设流程
  • 网站前台功能聊城经济开发区人才网
  • 备案号怎么添加到网站青岛栈桥门票多少钱一张
  • 建立网站的过程工业和信息化部网站备案管理系统
  • 市工商局网站建设情况天津百度优化公司
  • 设计一个网站报价cpa项目怎么做必须有网站么
  • 怎么认证网站做网站运营工资是不是很低