我正在编写一个 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 关注
- 165 浏览
添加回答
举报
0/150
提交
取消