我正在編寫一個 Web 應用程序。傳入的請求將首先通過中間件。目前,我添加了兩個中間件會話和安全性。遍歷中間件后,它將執行請求的處理程序。會話和安全中間件將在它們自己的 goroutine 中執行。當我測試時,我有很多數據競爭,特別是在中間件部分我使用 negroni 來處理中間件作品。方式,我如何處理中間件func New(res http.ResponseWriter, req *http.Request, next http.HandlerFunc) { if err := process(security.ServeHttp(res, req), session.ServeHttp(res, req)); err != nil { res.WriteHeader(http.StatusInternalServerError) return } log.Println("End of process middlewares") next(res, req)}// Process all middlewaresfunc process(chErrs ...<-chan error) error { for _, chErr := range chErrs { // Will abort the loop, when error occurs if err := <-chErr; err != nil { return err } } return nil}如您所見,每個中間件都有自己的頻道。for 語句將循環直到錯誤通道關閉或錯誤發送。服務器配置func Config() *negroni.Negroni { n := negroni.Classic() n.Use(negroni.HandlerFunc(middlewares.New)) n.UseHandler(routes.Set()) return n}我的問題是,中間件是原因,為什么我有數據競賽?
- 1 回答
- 0 關注
- 190 瀏覽
添加回答
舉報
0/150
提交
取消