Use implements `Router#Use()` for sub-routes within the Group.
(ms ...Middleware)
| 49 | |
| 50 | // Use implements `Router#Use()` for sub-routes within the Group. |
| 51 | func (g *xGroup) Use(ms ...Middleware) Group { |
| 52 | if len(ms) <= 0 { |
| 53 | return g |
| 54 | } |
| 55 | |
| 56 | // deepcopy middleware structs to avoid middleware chain misbehaving |
| 57 | m := []Middleware{} |
| 58 | for _, om := range ms { |
| 59 | //newM := reflect.New(reflect.ValueOf(om).Elem().Type()).Interface().(Middleware) |
| 60 | newElem := reflect.New(reflect.TypeOf(om).Elem()) |
| 61 | newElem.Elem().Set(reflect.ValueOf(om).Elem()) |
| 62 | newM := newElem.Interface().(Middleware) |
| 63 | |
| 64 | newM.SetNext(nil) |
| 65 | m = append(m, newM) |
| 66 | } |
| 67 | step := len(g.middlewares) - 1 |
| 68 | for i := range m { |
| 69 | if m[i] != nil { |
| 70 | if step >= 0 { |
| 71 | g.middlewares[step].SetNext(m[i]) |
| 72 | } |
| 73 | g.middlewares = append(g.middlewares, m[i]) |
| 74 | step++ |
| 75 | } |
| 76 | } |
| 77 | return g |
| 78 | } |
| 79 | |
| 80 | // DELETE implements `Router#DELETE()` for sub-routes within the Group. |
| 81 | func (g *xGroup) DELETE(path string, h HttpHandle) RouterNode { |