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      /

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章