Verwenden Sie die Eigenschaften von FunktionsaufrufstapelLIFO, um die Middleware nach der benutzerdefinierten Verarbeitungsfunktion geschickt zu vervollständigen ist abgeschlossene Verarbeitungsvorgänge.
Djangos Verarbeitungsmethode besteht darin, eine Klasse zu definieren, eine Methode für die Verarbeitung vor der Anforderungsverarbeitung zu definieren und eine Methode für die Verarbeitung nach der Anforderungsverarbeitung zu definieren.
Gins Vorgehensweise ist flexibler, aber Djangos Vorgehensweise ist klarer.
Anforderungsparameterbindung
Für den Erhalt von Anforderungsinhalten gibt es bei der Modellbindung die folgenden Szenarien:
- Wenn Bindungsfehler vom Benutzer selbst oder vom Framework behandelt werden, unabhängig davon, ob sich der Benutzer um den Inhalt kümmern muss Die Anfrage „Wählen Sie verschiedene Bindemittel“
- Die Antwort im Gin-Framework für diese Szenarien lautet: Stellen Sie verschiedene Methoden bereit, um die oben genannten Anforderungen zu erfüllen. Der entscheidende Punkt liegt hier immer noch im Nutzungsszenario.
// 自动更加请求头选择不同的绑定器对象进行处理 func (c *Context) Bind(obj interface{}) error { b := binding.Default(c.Request.Method, c.ContentType()) return c.MustBindWith(obj, b) } // 绑定失败后,框架会进行统一的处理 func (c *Context) MustBindWith(obj interface{}, b binding.Binding) (err error) { if err = c.ShouldBindWith(obj, b); err != nil { c.AbortWithError(400, err).SetType(ErrorTypeBind) } return } // 用户可以自行选择绑定器,自行对出错处理。自行选择绑定器,这也意味着用户可以自己实现绑定器。 // 例如:嫌弃默认的json处理是用官方的json处理包,嫌弃它慢,可以自己实现Binding接口 func (c *Context) ShouldBindWith(obj interface{}, b binding.Binding) error { return b.Bind(c.Request, obj) }