gin中在中间件或handler中使用goroutine
package main import (
"fmt"
"github.com/gin-gonic/gin"
"log"
"time"
) func main() {
// 当在中间件或handler启动新的goroutine时, 不能使用原始的上下文,必须使用只读的副本
r := gin.Default()
r.GET("/long_async", func(context *gin.Context) {
// 创建在goroutine中使用的副本
cpContext := context.Copy()
go func() {
time.Sleep(2 * time.Second)
// 注意:使用的是复制的上下文cpContext,这一点很重要
fmt.Println(cpContext.Request.URL.Path)
}()
})
r.GET("/long_sync", func(context *gin.Context) {
time.Sleep(2 * time.Second)
// 因为没有使用goroutine,所以不需要拷贝上下文
log.Println(context.Request.URL.Path)
})
r.Run()
}
在中间件中使用goroutine
func main() {
// 在中间件中使用goroutine时,必须使用上下文的只读副本
router := gin.Default()
router.Use(func(context *gin.Context) {
cpContext := context.Copy()
go func() {
log.Println("中间件执行了")
log.Println(cpContext.Request.URL.Path)
}()
})
router.GET("/json", func(context *gin.Context) {
context.String(200, "OK")
})
router.Run()
}
gin中在中间件或handler中使用goroutine的更多相关文章
- gin框架中的中间件
全局中间件 所有请求都经过此中间件 中间件中设置值 func MiddleWare() gin.HandlerFunc { return func(context *gin.Context) { t ...
- 在Asp.Net Core中使用中间件保护非公开文件
在企业开发中,我们经常会遇到由用户上传文件的场景,比如某OA系统中,由用户填写某表单并上传身份证,由身份管理员审查,超级管理员可以查看. 就这样一个场景,用户上传的文件只能有三种人看得见(能够访问) ...
- ASP.NET Core 中的中间件
前言 由于是第一次写博客,如果您看到此文章,希望大家抱着找错误.批判的心态来看. sky! 何为中间件? 在 ASP.NET Framework 中应该都知道请求管道.可参考:浅谈 ASP.NET ...
- ASP.NET MVC 中如何用自定义 Handler 来处理来自 AJAX 请求的 HttpRequestValidationException 错误
今天我们的项目遇到问题 为了避免跨站点脚本攻击, 默认我们项目是启用了 validateRequest,这也是 ASP.NET 的默认验证规则.项目发布后,如果 customError 启用了,则会显 ...
- handler.post 为什么要将thread对象post到handler中执行呢?
转载网址:http://www.cnblogs.com/crazypebble/archive/2011/03/23/1991829.html在Android中使用Handler和Thread线程执行 ...
- asp.net Handler中的IsReusable属性及在Handler中使用Session
大家在用HttpHandler的时候,一般都会有两个大的疑问(当然,前提是你有钻研精神的话,呵呵) 1. IsReusable到底什么意思? 老实说,这个属性很多人都感兴趣,但搞懂的人确实不多.MSD ...
- Django中Middleware中间件
Django中Middleware中间件 1 Middleware中间件概述 django中间middleware实质就是一个类,django会根据自己的规则在合适的时机执行中间件相应的方法.实际上当 ...
- [翻译]在asp.net core2.0 OpenID Connect Handler中丢失了声明(CLaims)?
注:这是一篇翻译,来自这里.这篇文章讲述了在asp.net core2.0中使用openid connect handler的过程中解析不到你想要的claim时,你可以参考这篇文章. Missing ...
- django中的中间件
中间件介绍 什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django的输入和输出.每个中间件组件都负责 ...
随机推荐
- PDF 补丁丁开放源代码
PDF补丁丁是一个多功能的 PDF 文档工具箱,在 2009 年开始,我开始了该程序的开发,到现在也已经有十二年了.它致力于解除 PDF 文档的烦恼,带有一个强大的 PDF 书签编辑器(可自动生成书签 ...
- Nginx中配置反向代理的proxy_pass的不同斜杠的区别
location /api1/ { proxy_pass http://localhost:8080; } # http://localhost/api1/xxx -> http://local ...
- windows安装openoffice4
官网:https://www.openoffice.org/download/index.html 下载完成后 直接点击安装即可
- TempCache 临时内存缓存器
TempCache.h /* *************************************************** * Copyright(c) Xiamen AutoNavi Co ...
- 【剑指Offer】树的子结构 解题报告(Python)
[剑指Offer]树的子结构 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目 ...
- 1164 - Horrible Queries
1164 - Horrible Queries PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 64 M ...
- 【错误】NetBeans2007:Cannot find nbproject/build-impl.xml
从中国考试教育网下载的NetBeans中国考试教育版2007报错 E:\æ¡é¢\javaèè¯\JavaApplication4\build.xml:7: Cannot find nbpr ...
- RTD2172方案|TYPEC转HDMI2.0转换器芯片|CS5265替代RTD2172
RTD2172 USB Type-C到HDMI转换器结合了USB Type-C输入接口和数字高清多媒体接口(HDMI)输出.嵌入式微控制器(MCU)基于工业标准8051内核.接收器端口将信道配置(CC ...
- 替代RTD2166|CS5212直接Pin to pin兼容替代RTD2166|替代RTD2166方案
RTD2166功能概述 RTD2166是一款DisplayPort端口到VGA转换器,成本较高,Capstone于2019年推出CS5212,直接Pin to pin兼容替代RTD2166,可用原RT ...
- java并发系列——底层CPU
java并发有诸多难点,实际上并非java语言本身的问题,本质上说一部分是因为并发操作本身的问题,另外一部分是因为计算机体系结构带来的.为了更好地理解java并发过程中的问题,我们应该对CPU有一些基 ...