gin 框架中middleware 怎么嵌套调用的
//通过Next函数实现嵌套,举例如下
package main
import "fmt"
type A struct{
index int
handles HandlesFunc
}
func (a *A) Handle(f HandleFunc){
a.handles=append(a.handles,f)
}
func (a* A) Next(){
a.index++ //这个是关键
for i:=len(a.handles);a.index<i;a.index++ {
a.handles[a.index](a)
}
}
type HandleFunc func(a *A)
type HandlesFunc []HandleFunc
func main(){
a:=&A{
index:-1,
handles:make(HandlesFunc,0),
}
a.Handle(func(a* A){fmt.Println("in function 1");a.Next();fmt.Println("exit function 1")})
a.Handle(func(a* A){fmt.Println("in function 2");a.Next();fmt.Println("exit function 2")})
a.Next()
}
//结果如下
in function 1
in function 2
exit function 2
exit function 1
作者:严彦彪
原创作品转载请注明出处