W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Exit
?: 僅退出當(dāng)前執(zhí)行的邏輯方法,不退出后續(xù)的請(qǐng)求流程,可用于替代?return
?。
ExitAll
?: 強(qiáng)行中斷當(dāng)前執(zhí)行流程,當(dāng)前執(zhí)行方法的后續(xù)邏輯以及后續(xù)所有的邏輯方法將不再執(zhí)行,常用于權(quán)限控制。
ExitHook
?: 當(dāng)路由匹配到多個(gè)?HOOK
?方法時(shí),默認(rèn)是按照路由匹配優(yōu)先級(jí)順序執(zhí)行?HOOK
?方法。當(dāng)在?HOOK
?方法中調(diào)用?ExitHook
?方法后,后續(xù)的?HOOK
?方法將不會(huì)被繼續(xù)執(zhí)行,作用類似?HOOK
?方法覆蓋。
這三個(gè)退出函數(shù)僅在服務(wù)函數(shù)和?HOOK
?事件回調(diào)函數(shù)中有效,無(wú)法控制中間件的執(zhí)行流程。
由于?ExitAll
?和?ExitHook
?方法在應(yīng)用層比較少用,因此這里僅介紹?Exit
?方法的使用。
?Exit*
?流程退出特性底層采用的是?panic...recover...
?機(jī)制來(lái)實(shí)現(xiàn)的,?CPU
?執(zhí)行損耗大約幾十納秒(?ns
?),通過(guò)極少的運(yùn)行時(shí)開銷來(lái)提高易用性。
package main
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
)
func main() {
s := g.Server()
s.BindHandler("/", func(r *ghttp.Request) {
if r.GetInt("type") == 1 {
r.Response.Writeln("john")
}
r.Response.Writeln("smith")
})
s.SetPort(8199)
s.Run()
}
執(zhí)行后,我們?cè)L問(wèn) http://127.0.0.1:8199/?type=1 ,可以看到頁(yè)面輸出了:
john
smith
我們將以上代碼稍微調(diào)整一下:
package main
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
)
func main() {
s := g.Server()
s.BindHandler("/", func(r *ghttp.Request) {
if r.GetInt("type") == 1 {
r.Response.Writeln("john")
r.Exit()
}
r.Response.Writeln("smith")
})
s.SetPort(8199)
s.Run()
}
執(zhí)行后,我們?cè)俅卧L問(wèn) http://127.0.0.1:8199/?type=1 ,可以看到頁(yè)面輸出了:
john
此外,?Response
?對(duì)象中提供了很多?Write*Exit
?的方法,表示輸出內(nèi)容后立即調(diào)用?Exit
?方法退出當(dāng)前服務(wù)方法。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: