Я не эксперт по gin
, но он похож на echo
, поэтому я создал фрагмент для вас, чтобы проверить, соответствует ли он вашим потребностям.
Похоже, что невозможно отсоединить промежуточное программное обеспечение после присоединенного , как описано здесь , поэтому я могу проверять глобальную переменную для каждого запроса, чтобы увидеть, доступен ли ресурс.
package main
import (
"net/http"
"sync/atomic"
"github.com/gin-contrib/static"
"github.com/gin-gonic/gin"
)
// using atomic package instead of using mutexes looks better in this scope
var noIndex int32
func indexMiddleware() gin.HandlerFunc {
hdl := static.Serve("/", static.LocalFile("./pages/home", true))
return func(c *gin.Context) {
if atomic.LoadInt32(&noIndex) == 0 {
hdl(c)
// if you have additional middlewares, let them run
c.Next()
return
}
c.AbortWithStatus(http.StatusBadRequest)
}
}
func main() {
r := gin.Default()
r.Use(indexMiddleware())
r.POST("/example", func(c *gin.Context) {
atomic.CompareAndSwapInt32(&noIndex, 0, 1)
c.String(http.StatusOK, "OK")
})
r.Run(":8080")
}