go 中间件 Gin 版

使用gin框架 实现web功能还是很方便的
比起net/http 方便简单很多

很重要的一点就是, context.Next() (context 为gin.context) 函数 之前的部分为 主处理逻辑之前执行的部分, Next之后为处理完之后执行的部分 ,理解这一点很重要,,其实也就是先将请求处理一下,框架会自动将处理后的请求发送给主处理代码段。

package main

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

func middle() gin.HandlerFunc {
	return func(c *gin.Context) {
		start := time.Now()
		c.String(200,"hello\n")
		head := c.Request.Header
		for k, v := range head {
			log.Println(k,":",v)
		}
		c.Next()
		latency := time.Since(start)
		log.Printf("This process is use %v from %v\n",latency,start)
	}
}

func main() {
	gin.DisableConsoleColor()
	router := gin.Default()
	router.GET("/", gin.BasicAuth(gin.Accounts{
		"foo":"bar",
	}),middle(),func(c *gin.Context) {
		time.Sleep(5*time.Second)
		c.JSON(http.StatusOK,gin.H{
			"status":"ok",
		})
	})

	 err := router.Run(":80")
	 if err != nil {
	 	fmt.Println(err)
		 return
	 }
}
输出的结果
[GIN-debug] Listening and serving HTTP on :80
2019/11/07 22:15:14 Sec-Fetch-Site : [none]
2019/11/07 22:15:14 Sec-Fetch-Mode : [navigate]
2019/11/07 22:15:14 Accept-Encoding : [gzip, deflate, br]
2019/11/07 22:15:14 Authorization : [Basic Zm9vOmJhcg==]
2019/11/07 22:15:14 Upgrade-Insecure-Requests : [1]....省略了一些输出
2019/11/07 22:15:14 Sec-Fetch-User : [?1]
2019/11/07 22:15:14 Accept-Language : [zh-CN,zh;q=0.9,en;q=0.8]
2019/11/07 22:15:14 Connection : [keep-alive]
2019/11/07 22:15:14 User-Agent : [Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36]

// 主要看这里 use 5.0259196s 这证明了 ,确实是在处理完主逻辑之后执行的代码。
2019/11/07 22:15:19 This process is use 5.0259196s from 2019-11-07 22:15:14.6182836 +0800 CST m=+10.036132601
[GIN] 2019/11/07 - 22:15:19 | 200 |    5.0259196s |       127.0.0.1 | GET      /

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值