gin框架15--在中间件中使用 Goroutine

gin框架15--在中间件中使用 Goroutine

介绍

本案例中介绍了如何在中间件中使用 Goroutine。

案例

当在中间件或 handler 中启动新的 Goroutine 时,不能使用原始的上下文,必须使用只读副本。
源码:

package main

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

func main() {
	r := gin.Default()
	r.GET("/long_async", func(c *gin.Context) {
		// 创建在 goroutine 中使用的副本
		cCp := c.Copy()
		go func() {
			time.Sleep(5 * time.Second)
			// 请注意您使用的是复制的上下文 "cCp",这一点很重要
			log.Println("done! in path " + cCp.Request.URL.Path)
		}()
	})

	r.GET("/long_sync", func(c *gin.Context) {
		time.Sleep(5 * time.Second)
		// 因为没有使用 goroutine,不需要拷贝上下文
		log.Println("done! in path " + c.Request.URL.Path)
	})
	r.Run(":8080")
}

测试:

[GIN] 2022/03/25 - 22:14:00 | 200 |       3.036µs |       127.0.0.1 | GET      "/long_async"
[GIN] 2022/03/25 - 22:14:01 | 200 |      20.604µs |       127.0.0.1 | GET      "/long_async"
2022/03/25 22:14:05 done! in path /long_async
2022/03/25 22:14:06 done! in path /long_async
2022/03/25 22:15:34 done! in path /long_sync
[GIN] 2022/03/25 - 22:15:34 | 200 |  5.003855098s |       127.0.0.1 | GET      "/long_sync"

说明

gin官方文档 在中间件中使用 Goroutine

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
fastapi、sanic和gin都是流行的Python和Go语言的Web框架,它们各自有不同的性能特点和使用场景。 1. fastapi: fastapi是一个基于Python的高性能Web框架,它使用异步编程风格(基于asyncio)来提供高性能的API服务。fastapi具有以下特点: - 强大的类型提示:利用Python的类型注解,可以提供更好的代码可读性和自动化文档生成。 - 快速:fastapi基于Starlette框架构建,并利用了Python的异步特性,能够处理大量并发请求。 - 自动化文档生成:fastapi可以根据代码的类型注解和API路由自动生成交互式文档。 - 支持WebSocket:fastapi能够处理WebSocket连接。 2. sanic: sanic是一个异步的Python Web框架,它使用的是Python 3.7+引入的asyncio库。sanic具有以下特点: - 高性能:sanic利用异步编程模型,能够处理大量并发请求,具有很好的性能表现。 - 简单易用:sanic提供了简洁的API接口,容易上手和使用。 - 异步支持:sanic支持异步请求处理和响应。 3. gin: gin是一个轻量级的Go语言Web框架,它具有以下特点: - 高性能:gin使用Go语言的协程(goroutine)和高效的路由处理机制,能够处理大量并发请求。 - 简洁快速:gin的API设计简洁,代码量少,启动速度快。 - 中间件支持:gin支持中间件机制,可以方便地实现各种功能,如路由日志、鉴权等。 对于性能方面的比较,实际结果会受多个因素的影响,如服务器硬件配置、网络环境、代码实现等。一般而言,由于fastapi和sanic都采用了异步编程模型,相对于传统的同步Web框架,它们能够处理更多的并发请求。而gin作为基于Go语言的Web框架,由于Go语言本身的并发特性,也能够提供很好的性能表现。 总结: - 如果你使用Python语言,对类型提示和自动生成文档有较高要求,并且需要处理大量并发请求,那么fastapi可能是一个不错的选择。 - 如果你使用Python语言,对性能有较高要求,并且喜欢异步编程模型,那么sanic可能更适合你。 - 如果你使用Go语言,并且对性能和简洁性有较高要求,那么gin可能是一个不错的选择。 需要注意的是,以上是对fastapi、sanic和gin的一般性比较,具体的选择还需要根据项目需求和个人喜好来决定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昕光xg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值