mirror of
https://github.com/infinite-iroha/touka.git
synced 2026-02-02 16:31:11 +08:00
add TempSkippedNodesPool
This commit is contained in:
parent
9cfc82a347
commit
60b2936eff
2 changed files with 23 additions and 3 deletions
|
|
@ -89,7 +89,7 @@ func (c *Context) reset(w http.ResponseWriter, req *http.Request) {
|
|||
if cap(c.Params) > 0 {
|
||||
c.Params = c.Params[:0]
|
||||
} else {
|
||||
c.Params = make(Params, 0, 5)
|
||||
c.Params = make(Params, 0, c.engine.maxParams)
|
||||
}
|
||||
c.handlers = nil
|
||||
c.index = -1 // 初始为 -1,`Next()` 将其设置为 0
|
||||
|
|
|
|||
24
engine.go
24
engine.go
|
|
@ -421,6 +421,22 @@ func getHandlerName(h HandlerFunc) string {
|
|||
|
||||
}
|
||||
|
||||
// TempSkippedNodes池
|
||||
var TempSkippedNodesPool = sync.Pool{
|
||||
New: func() any {
|
||||
return make([]skippedNode, 0, 256)
|
||||
},
|
||||
}
|
||||
|
||||
func GetTempSkippedNodes() *[]skippedNode {
|
||||
return TempSkippedNodesPool.Get().(*[]skippedNode)
|
||||
}
|
||||
|
||||
func PutTempSkippedNodes(skippedNodes *[]skippedNode) {
|
||||
*skippedNodes = (*skippedNodes)[:0] // 重置slice
|
||||
TempSkippedNodesPool.Put(skippedNodes)
|
||||
}
|
||||
|
||||
// 405中间件
|
||||
func MethodNotAllowed() HandlerFunc {
|
||||
return func(c *Context) {
|
||||
|
|
@ -433,7 +449,9 @@ func MethodNotAllowed() HandlerFunc {
|
|||
allowedMethods := []string{}
|
||||
for _, treeIter := range engine.methodTrees {
|
||||
// 注意这里 treeIter.root 才是正确的,因为 treeIter 是 methodTree 类型
|
||||
value := treeIter.root.getValue(requestPath, nil, &c.SkippedNodes, false)
|
||||
tempSkippedNodes := GetTempSkippedNodes()
|
||||
value := treeIter.root.getValue(requestPath, nil, tempSkippedNodes, false)
|
||||
PutTempSkippedNodes(tempSkippedNodes)
|
||||
if value.handlers != nil {
|
||||
allowedMethods = append(allowedMethods, treeIter.method)
|
||||
}
|
||||
|
|
@ -451,7 +469,9 @@ func MethodNotAllowed() HandlerFunc {
|
|||
continue
|
||||
}
|
||||
// 注意这里 treeIter.root 才是正确的,因为 treeIter 是 methodTree 类型
|
||||
value := treeIter.root.getValue(requestPath, nil, &c.SkippedNodes, false) // 只查找是否存在,不需要参数
|
||||
tempSkippedNodes := GetTempSkippedNodes()
|
||||
value := treeIter.root.getValue(requestPath, nil, tempSkippedNodes, false) // 只查找是否存在,不需要参数
|
||||
PutTempSkippedNodes(tempSkippedNodes)
|
||||
if value.handlers != nil {
|
||||
// 使用定义的ErrorHandle处理
|
||||
engine.errorHandle.handler(c, http.StatusMethodNotAllowed, errors.New("method not allowed"))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue