最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

c.netx()

測(cè)試代碼

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

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í)行順序是按照注冊(cè)順序執(zhí)行的,中間件可以通過 c.Abort() 來中止后續(xù)中間件或處理器的處理流程。

return 測(cè)試代碼

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í)行順序是按照注冊(cè)順序執(zhí)行的,中間件可以通過 retrurn 來中止當(dāng)前中間件的后續(xù)處理流程。

c.abort() +return 測(cè)試代碼

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í)行順序是按照注冊(cè)順序執(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang使用viper解析配置文件的示例代碼

    golang使用viper解析配置文件的示例代碼

    Viper是一個(gè)輕量級(jí)的、易于使用的配置工具庫,它允許你在Go應(yīng)用中方便地管理配置,Viper支持從多種來源讀取配置,如環(huán)境變量、命令行參數(shù)、文件、甚至是加密的數(shù)據(jù)存儲(chǔ),本文給大家介紹了golang使用viper解析配置文件,需要的朋友可以參考下
    2024-08-08
  • Go語言中雙Token登錄系統(tǒng)的思路與實(shí)現(xiàn)詳解

    Go語言中雙Token登錄系統(tǒng)的思路與實(shí)現(xiàn)詳解

    在現(xiàn)代Web應(yīng)用中,身份認(rèn)證是保障系統(tǒng)安全的重要環(huán)節(jié),本文將介紹如何使用Go語言實(shí)現(xiàn)雙Token登錄系統(tǒng),文中的示例代碼講解詳細(xì),需要的可以了解下
    2025-07-07
  • Golang動(dòng)態(tài)調(diào)用方法小結(jié)

    Golang動(dòng)態(tài)調(diào)用方法小結(jié)

    本文主要介紹了Golang動(dòng)態(tài)調(diào)用方法小結(jié),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Golang中使用JSON的一些小技巧分享

    Golang中使用JSON的一些小技巧分享

    這篇文章主要分享了Golang中使用JSON的一些小技巧,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • go類型轉(zhuǎn)換及與C的類型轉(zhuǎn)換方式

    go類型轉(zhuǎn)換及與C的類型轉(zhuǎn)換方式

    這篇文章主要介紹了go類型轉(zhuǎn)換及與C的類型轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • Golang HTML 模板使用指南示例詳解

    Golang HTML 模板使用指南示例詳解

    本文詳細(xì)介紹了Golang HTML模板的使用方法,包括基礎(chǔ)模板、高級(jí)模板、完整應(yīng)用示例、CSS樣式、JavaScript交互等,文章強(qiáng)調(diào)了模板組織、代碼復(fù)用、語義化HTML、響應(yīng)式設(shè)計(jì)、性能優(yōu)化等最佳實(shí)踐,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • Go語言開發(fā)實(shí)現(xiàn)查詢IP信息的MCP服務(wù)器

    Go語言開發(fā)實(shí)現(xiàn)查詢IP信息的MCP服務(wù)器

    隨著?MCP?的快速普及和廣泛應(yīng)用,MCP?服務(wù)器也層出不窮,本文將詳細(xì)介紹如何在?Go?語言中使用?go-mcp?庫來開發(fā)一個(gè)查詢?IP?信息的?MCP?服務(wù)器,有需要的小伙伴可以參考下
    2025-04-04
  • 如何判斷Golang接口是否實(shí)現(xiàn)的操作

    如何判斷Golang接口是否實(shí)現(xiàn)的操作

    這篇文章主要介紹了如何判斷Golang接口是否實(shí)現(xiàn)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go string 字符串處理與格式化詳解從底層原理到工程實(shí)踐

    Go string 字符串處理與格式化詳解從底層原理到工程實(shí)踐

    這篇文章給大家介紹Go string字符串處理與格式化詳解從底層原理到工程實(shí)踐,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2026-05-05
  • 詳解Golang中字符串的使用

    詳解Golang中字符串的使用

    這篇文章主要為大家詳細(xì)介紹了Golang中字符串的使用,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Golang有一定的幫助,感興趣的小伙伴可以了解一下
    2022-10-10

最新評(píng)論

博乐市| 承德县| 永济市| 墨玉县| 丰城市| 奇台县| 禄丰县| 文山县| 三台县| 海盐县| 定安县| 冕宁县| 当阳市| 宾阳县| 鸡西市| 桑植县| 萨迦县| 和林格尔县| 新晃| 将乐县| 客服| 平潭县| 岢岚县| 仁怀市| 梓潼县| 昆明市| 合水县| 江津市| 宁阳县| 宝兴县| 庆安县| 浮梁县| 九寨沟县| 姚安县| 金秀| 安远县| 龙岩市| 岗巴县| 仙桃市| 两当县| 玛沁县|