iT邦幫忙

2021 iThome 鐵人賽

DAY 23
0
自我挑戰組

go go let's go - golang 從0開始系列 第 23

Golang 轉生到web世界 - gin Middleware中間件

Golang

Golang gin Middleware中間件

我第一次接觸Middleware這個詞是在php laravel的時候,Middleware有人翻 中間件也有人翻中介軟體,常見的用途之一就是應用在身分驗證的功能,我們在特定route設定Middleware,此時的Middleware可以想像是進來之前的檢查哨,我們就不需要在一一自己設置,而是在route那邊處理。

如果是使用vscode的朋友,此時可以點Default,就會跳去該程式碼的function

package main

import (
	"fmt"

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

func main() {
	r := gin.Default()
	r.POST("/", func(c *gin.Context) {

		fmt.Println(c.GetPostFormArray("str1"))

	})

	r.Run(":8000")
}

這時候我們會看到Default的function如下

// Default returns an Engine instance with the Logger and Recovery middleware already attached.
func Default() *Engine {
	debugPrintWARNINGDefault()
	engine := New()
	engine.Use(Logger(), Recovery())
	return engine
}

所以我們可以得知,在不知不覺中,其實我們在使用gin.Default()返回時,就已經使用了Recovery和Logger這兩個Middleware。

package main

import (
	"fmt"
	"time"

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

func LoggerHandler() gin.HandlerFunc {
	return func(c *gin.Context) {
		t := time.Now()
		fmt.Printf("gogo %v \n", t)
	}
}
func main() {
	r := gin.Default()
	r.Use(LoggerHandler())
	//註冊一個Middleware

	r.GET("/", func(c *gin.Context) {
		fmt.Println("HELLO")
	})

	r.Run(":8000")
}

這時候可以執行看看http://localhost:8000/
也確實看終端機輸出有print了~


上一篇
Golang 轉生到web世界 - Gin HTML渲染
下一篇
Golang 測試
系列文
go go let's go - golang 從0開始30

尚未有邦友留言

立即登入留言