欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

go gin中間件關(guān)于 c.next()、c.abort()和return的使用小結(jié)

 更新時(shí)間:2024年03月11日 11:29:02   作者:赴前塵  
中間件的執(zhí)行順序是按照注冊順序執(zhí)行的,中間件可以通過 c.abort() + retrurn 來中止當(dāng)前中間件,后續(xù)中間件和處理器的處理流程,?這篇文章給大家介紹go gin中間件關(guān)于 c.next()、c.abort()和return的使用小結(jié),感興趣的朋友跟隨小編一起看看吧

c.netx()

測試代碼

package main
import (
	"fmt"
	"github.com/gin-gonic/gin"
	"log"
	"net/http"
)
func main() {
	g := gin.New()
	g.Use(middleware1(), middleware2())
	g.GET("/", func(c *gin.Context) {
		fmt.Println("process request")
		c.JSON(http.StatusOK, "hello,world!")
	})
	err := g.Run()
	if err != nil {
		log.Fatal(err)
	}
}
func middleware1() gin.HandlerFunc {
	return func(c *gin.Context) {
		fmt.Println("middleware1 start")
		c.Next()
		fmt.Println("middleware1 end")
	}
}
func middleware2() gin.HandlerFunc {
	return func(c *gin.Context) {
		fmt.Println("middleware2 start")
		c.Next()
		fmt.Println("middleware2 end")
	}
}

訪問 http://127.0.0.1:8080 執(zhí)行結(jié)果如下,瀏覽器輸出 “hello,world!”

middleware1 start
middleware2 start
process request
middleware2 end
middleware1 end

總結(jié)
中間件的執(zhí)行順序是按照注冊的順序執(zhí)行的,在中間件中使用 c.Next() 方法,會(huì)先執(zhí)行c.Next() 前面的,然后將控制權(quán)傳遞給下一個(gè)中間件或處理器,最后按照相反順序執(zhí)行中間件c.Next() 后面的代碼。 c.abort() 測試代碼

package main
import (
	"fmt"
	"github.com/gin-gonic/gin"
	"log"
	"net/http"
)
func main() {
	g := gin.New()
	g.Use(middleware1(), middleware2(), middleware3())
	g.GET("/", func(c *gin.Context) {
		fmt.Println("process request")
		c.JSON(http.StatusOK, "hello,world!")
	})
	err := g.Run()
	if err != nil {
		log.Fatal(err)
	}
}
func middleware1() gin.HandlerFunc {
	return func(c *gin.Context) {
		fmt.Println("middleware1 start")
		c.Next()
		fmt.Println("middleware1 end")
	}
}
func middleware2() gin.HandlerFunc {
	return func(c *gin.Context) {
		fmt.Println("middleware2 start")
		c.Abort()
		fmt.Println("middleware2 end")
	}
}
func middleware3() gin.HandlerFunc {
	return func(c *gin.Context) {
		fmt.Println("middleware3 start")
		c.Next()
		fmt.Println("middleware3 end")
	}
}

訪問 http://127.0.0.1:8080 執(zhí)行結(jié)果如下,瀏覽器無輸出

middleware1 start
middleware2 start
middleware2 end
middleware1 end

總結(jié)
中間件的執(zhí)行順序是按照注冊順序執(zhí)行的,中間件可以通過 c.Abort() 來中止后續(xù)中間件或處理器的處理流程。

return 測試代碼

package main
import (
	"fmt"
	"github.com/gin-gonic/gin"
	"log"
	"net/http"
)
func main() {
	g := gin.New()
	g.Use(middleware1(), middleware2(), middleware3())
	g.GET("/", func(c *gin.Context) {
		fmt.Println("process request")
		c.JSON(http.StatusOK, "hello,world!")
	})
	err := g.Run()
	if err != nil {
		log.Fatal(err)
	}
}
func middleware1() gin.HandlerFunc {
	return func(c *gin.Context) {
		fmt.Println("middleware1 start")
		c.Next()
		fmt.Println("middleware1 end")
	}
}
func middleware2() gin.HandlerFunc {
	return func(c *gin.Context) {
		fmt.Println("middleware2 start")
		return
		fmt.Println("middleware2 end")
	}
}
func middleware3() gin.HandlerFunc {
	return func(c *gin.Context) {
		fmt.Println("middleware3 start")
		c.Next()
		fmt.Println("middleware3 end")
	}
}

訪問 http://127.0.0.1:8080 執(zhí)行結(jié)果如下,瀏覽器輸出 “hello,world!”

middleware1 start
middleware2 start
middleware3 start
process request
middleware3 end
middleware1 end

總結(jié)
中間件的執(zhí)行順序是按照注冊順序執(zhí)行的,中間件可以通過 retrurn 來中止當(dāng)前中間件的后續(xù)處理流程。

c.abort() +return 測試代碼

package main
import (
	"fmt"
	"github.com/gin-gonic/gin"
	"log"
	"net/http"
)
func main() {
	g := gin.New()
	g.Use(middleware1(), middleware2(), middleware3())
	g.GET("/", func(c *gin.Context) {
		fmt.Println("process request")
		c.JSON(http.StatusOK, "hello,world!")
	})
	err := g.Run()
	if err != nil {
		log.Fatal(err)
	}
}
func middleware1() gin.HandlerFunc {
	return func(c *gin.Context) {
		fmt.Println("middleware1 start")
		c.Next()
		fmt.Println("middleware1 end")
	}
}
func middleware2() gin.HandlerFunc {
	return func(c *gin.Context) {
		fmt.Println("middleware2 start")
		c.Abort()
		return
		fmt.Println("middleware2 end")
	}
}
func middleware3() gin.HandlerFunc {
	return func(c *gin.Context) {
		fmt.Println("middleware3 start")
		c.Next()
		fmt.Println("middleware3 end")
	}
}

訪問 http://127.0.0.1:8080 執(zhí)行結(jié)果如下,瀏覽器無輸出

middleware1 start
middleware2 start
middleware1 end

總結(jié)
中間件的執(zhí)行順序是按照注冊順序執(zhí)行的,中間件可以通過 c.abort() + retrurn 來中止當(dāng)前中間件,后續(xù)中間件和處理器的處理流程。 

到此這篇關(guān)于go gin中間件關(guān)于 c.next()、c.abort()和return的使用的文章就介紹到這了,更多相關(guān)go gin中間件c.next()、c.abort()和return內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文帶你掌握go中的異常處理

    一文帶你掌握go中的異常處理

    代碼在執(zhí)行的過程中可能因?yàn)橐恍┻壿嬌系膯栴}而出現(xiàn)錯(cuò)誤,我們稱之為異常,那么如何處理這些異常呢,下面小編就來和大家詳細(xì)聊聊golang中的異常處理機(jī)制吧
    2023-09-09
  • golang移除數(shù)組中重復(fù)的元素操作

    golang移除數(shù)組中重復(fù)的元素操作

    這篇文章主要介紹了golang移除數(shù)組中重復(fù)的元素操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Golang 類型斷言的具體使用

    Golang 類型斷言的具體使用

    本文主要介紹了Golang 類型斷言的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • GO的基礎(chǔ)知識(shí)掃盲注意事項(xiàng)

    GO的基礎(chǔ)知識(shí)掃盲注意事項(xiàng)

    這篇文章主要介紹了GO的基礎(chǔ)知識(shí)注意事項(xiàng),本文是GO語言小白的掃盲文,主要講解了go語言的基本知識(shí),GO程序目錄結(jié)構(gòu),GO程序包的導(dǎo)入與別名運(yùn)用,GO內(nèi)置關(guān)鍵字,GO注釋方法需要的朋友可以參考下
    2022-12-12
  • go語言中GOPATH GOROOT的作用和設(shè)置方式

    go語言中GOPATH GOROOT的作用和設(shè)置方式

    這篇文章主要介紹了go語言中GOPATH GOROOT的作用和設(shè)置方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • GoLang中生成UUID唯一標(biāo)識(shí)的實(shí)現(xiàn)

    GoLang中生成UUID唯一標(biāo)識(shí)的實(shí)現(xiàn)

    這篇文章主要介紹了GoLang中生成UUID唯一標(biāo)識(shí)的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • Go實(shí)現(xiàn)共享庫的方法

    Go實(shí)現(xiàn)共享庫的方法

    本文主要介紹了Go實(shí)現(xiàn)共享庫的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • go語言優(yōu)雅地處理error工具及技巧詳解

    go語言優(yōu)雅地處理error工具及技巧詳解

    這篇文章主要為大家介紹了go語言優(yōu)雅地處理error工具及技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Go|使用Options模式和建造者模式創(chuàng)建對象實(shí)戰(zhàn)

    Go|使用Options模式和建造者模式創(chuàng)建對象實(shí)戰(zhàn)

    這篇文章主要介紹了Go使用Options模式和建造者模式創(chuàng)建對象實(shí)戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • golang定時(shí)器Timer的用法和實(shí)現(xiàn)原理解析

    golang定時(shí)器Timer的用法和實(shí)現(xiàn)原理解析

    這篇文章主要介紹了golang定時(shí)器Ticker,本文主要來看一下Timer的用法和實(shí)現(xiàn)原理,需要的朋友可以參考以下內(nèi)容
    2023-04-04

最新評論