gin icon indicating copy to clipboard operation
gin copied to clipboard

Does gin support parallel middlewares ?

Open dataknower opened this issue 1 year ago • 4 comments

hi, how to set the middlewares flow like below ?

image

dataknower avatar Jul 29 '22 07:07 dataknower

no it does not.

eleven26 avatar Jul 30 '22 04:07 eleven26

consider wrap the 1,2,3 as 4.

zzztttkkk avatar Aug 30 '22 09:08 zzztttkkk

func midldleware1(c *gin.Context) {
    //blalba
}

func midldleware2(c *gin.Context) {
    //blalba
}

func Parrallel() gin.HandlerFunc {
  return func(c *gin.Context) {
   // you have to use sync.WaitGroup before
    go midldleware1(c)
    go midldleware2(c)
    c.Next()
  }
}

but it is not recommended 🗡️

Gasoid avatar Sep 07 '22 18:09 Gasoid

consider wrap the 1,2,3 as 4.

yes it should be designed like this.

for code you may need this

func midldleware1(c *gin.Context) {
	// blalba
}

func midldleware2(c *gin.Context) {
	// blalba
}

func Parrallel(midldlewares ...gin.HandlerFunc) gin.HandlerFunc {
	return func(c *gin.Context) {
		wg := &sync.WaitGroup{}
		for _, midldleware := range midldlewares {
			go func() {
				wg.Add(1)
				defer wg.Done()
				midldleware(c)
			}
		}
		wg.Wait()
		c.Next()
	}
}

Parrallel(midldleware1,midldleware2)

ywanbing avatar Sep 13 '22 07:09 ywanbing