首页 > 其他分享 >go语言学习-gin框架中间件

go语言学习-gin框架中间件

时间:2023-04-12 12:33:53浏览次数:35  
标签:fmt 中间件 Println func time go gin

全局中间件

所有的请求都经过此中间件

// 所有请求经过此中间件
package main

import (
	"fmt"
	"time"

	"github.com/gin-gonic/gin"
)

//定义中间件

func MiddleWare() gin.HandlerFunc {
	return func(ctx *gin.Context) {
		t := time.Now()
		fmt.Println("中间件开始执行了")
		//设置变量到Context的key中,可以通过Get()取
		ctx.Set("request", "中间件")
		status := ctx.Writer.Status()
		fmt.Println("中间件执行完毕", status)
		t2 := time.Since(t)
		fmt.Println("time:", t2)
	}

}

func main() {
	r := gin.Default()
	r.Use(MiddleWare())
	//{}为了规范代码
	{
		r.GET("/ce", func(ctx *gin.Context) {
			//取值
			req, _ := ctx.Get("request")
			fmt.Println("request:", req)
			//页面接收
			ctx.JSON(200, gin.H{
				"request": req,
			})
		})
	}
	r.Run()
}

测试结果

go语言学习-gin框架中间件_中间件

Next()方法


package main

import (
	"fmt"
	"time"

	"github.com/gin-gonic/gin"
)

// 定义中间
func MiddleWare() gin.HandlerFunc {
	return func(c *gin.Context) {
		t := time.Now()
		fmt.Println("中间件开始执行了")
		// 设置变量到Context的key中,可以通过Get()取
		c.Set("request", "中间件")
		// 执行函数
		c.Next()
		// 中间件执行完后续的一些事情
		status := c.Writer.Status()
		fmt.Println("中间件执行完毕", status)
		t2 := time.Since(t)
		fmt.Println("time:", t2)
	}
}

func main() {
	// 1.创建路由
	// 默认使用了2个中间件Logger(), Recovery()
	r := gin.Default()
	// 注册中间件
	r.Use(MiddleWare())
	// {}为了代码规范
	{
		r.GET("/ce", func(c *gin.Context) {
			// 取值
			req, _ := c.Get("request")
			fmt.Println("request:", req)
			// 页面接收
			c.JSON(200, gin.H{"request": req})
		})

	}
	r.Run()
}

go语言学习-gin框架中间件_github_02


局部中间件

package main

import (
    "fmt"
    "time"

    "github.com/gin-gonic/gin"
)

// 定义中间
func MiddleWare() gin.HandlerFunc {
    return func(c *gin.Context) {
        t := time.Now()
        fmt.Println("中间件开始执行了")
        // 设置变量到Context的key中,可以通过Get()取
        c.Set("request", "中间件")
        // 执行函数
        c.Next()
        // 中间件执行完后续的一些事情
        status := c.Writer.Status()
        fmt.Println("中间件执行完毕", status)
        t2 := time.Since(t)
        fmt.Println("time:", t2)
    }
}

func main() {
    // 1.创建路由
    // 默认使用了2个中间件Logger(), Recovery()
    r := gin.Default()
    //局部中间键使用
    r.GET("/ce", MiddleWare(), func(c *gin.Context) {
        // 取值
        req, _ := c.Get("request")
        fmt.Println("request:", req)
        // 页面接收
        c.JSON(200, gin.H{"request": req})
    })
    r.Run()
}

中间件练习


package main

import (
	"fmt"
	"time"

	"github.com/gin-gonic/gin"
)

// 定义中间
func myTime(c *gin.Context) {
	start := time.Now()
	c.Next()
	// 统计时间
	since := time.Since(start)
	fmt.Println("程序用时:", since)
}

// 定义处理函数
func ShopIndexHandler(ctx *gin.Context) {
	time.Sleep(5 * time.Second)

}

func ShopHomeHandler(ctx *gin.Context) {
	time.Sleep(3 * time.Second)

}

func main() {
	r := gin.Default()
	r.Use(myTime)
	ShoppingGroup := r.Group("/shopping")
	{
		ShoppingGroup.GET("/index", ShopIndexHandler)
		ShoppingGroup.GET("/home", ShopHomeHandler)
	}
	r.Run()
}

go语言学习-gin框架中间件_github_03

标签:fmt,中间件,Println,func,time,go,gin
From: https://blog.51cto.com/u_11555417/6185450

相关文章

  • nginx+tomcat双端口实现负载均衡
    nginx基础配置---点击tomcat基础配置---点击上述配置完成之后进行对tomcat配置不同端口tomcat设置端口#移动tomcat设置两个主目录[root@lyxlocal]#mvapache-tomcat-8.5.79tomcat-home[root@lyxlocal]#cp-Rtomcat-hometomcat-8080[root@lyxlocal]#cp-Rtomcat-home......
  • 在django中自动删除超过10天的数据
    需求:比如过期10天的产品自动删除记录posting_date=models.DateTimeField(auto_now_add=True)#purge_old_data.pyfromdjango.core.management.baseimportBaseCommand,CommandErrorfromcus_leads.modelsimportCustomerLeadsfromdatetimeimportdatetime,timedel......
  • MongoDB复制集环境滚动构建索引
    滚动构建索引每次最多取出一个复制集成员,从辅助成员开始,并在该成员上以standalone方构建索引。滚动索引构建至少需要一次副本集选举。 考虑点1.唯一性索引使用滚动方式构建唯一性索引,你必须停止集合上所有写操作。否则,只能在主节点上使用db.collection.createIndex()创建。2......
  • djangoadmin 过期显示红色字体
    参考:https://docs.djangoproject.com/en/1.8/topics/i18n/timezones/#naive-and-aware-datetime-objects起因:正常的dateime.now()得到的日期不能和Django数据库里面存储的日期数据做对比,两个解决办法:1、是把Django配置里面的USE_TZ设置成False,这样Django的数据就没有时区信息了......
  • CSGO准星代码
    CSGO-at3tC-w6puH-VM7wr-c3wSu-5L5mA viewmodel_fov68; viewmodel_offset_x2.5; viewmodel_offset_y0; viewmodel_offset_z-1.5; viewmodel_presetpos3; cl_viewmodel_shift_left_amt1.5; cl_viewmodel_shift_right_amt0.75; viewmodel_recoil0; cl_ri......
  • Django框架基础(1)
    一、Django的历史1、Django是什么?  Django是使用Python语言开发的一款免费而且开源的Web应用框架。  由于Python语言的跨平台性,所以Django同样支持Windows、Linux和Mac系统。  在Python语言炽手可热的当下,Django也迅速的崛起,在Web开发领域占有一席之......
  • Good Segment
    Givenanarrayofbadnumbersandarangeofintegers,determinethelongestsegmentofintegerswithintherangethatdoesnotincludeanybadnumbers.Examplen=6badNumbers=[37,7,22,15,49,60]lower=3upper=48Thesegmentsintherange3to......
  • go语言代码规范
    go语言代码规范指南篇编码风格原则清晰:代码的目的和原理对读者来说是清晰的简单:代码以最简单的方式完成其目标简明:代码具有较高的信噪比可维护性:编写的代码可以很容易维护一致:代码与广泛的谷歌代码库风格一致清晰清晰主要是通过有效的命名、有用的注释和有效的代码组织......
  • NGINX进一步学习
    神器Nginx的学习手册(建议收藏)运维网工 2023-04-0709:00 发表于重庆收录于合集#Nginx学习手册1个#安全运维5个#运维工程师109个来源:DevOps技术栈大家好,我是中文妹。Nginx是一个高性能的HTTP和反向代理服务器,特点是占用内存少,并发能力强,事实上Nginx......
  • spring security FormLoginConfigure的作用和源码解读
    这一节来研究下springsecurity中FormLoginConfigurer这个配置器的作用一、综述FormLoginConfigurer本质上还是一个SecurityConfigurer,用来对HttpSecurity这个构建器进行配置,它用来对表单登录的功能进行配置,通过HttpSecurity#formLogin()方法来给HttpSecurity对象中添加此配......