Middleware é um mecanismo que permite que o código seja executado antes ou depois do código principal no ciclo de vida de uma solicitação HTTP. Pode ser entendido como um gancho no framework que intercepta todas as solicitações e respostas.

Utilizando Middleware no iris

Você pode registrar middleware para rotas através do método Use no iris.

package main

// Importe o pacote
import "github.com/kataras/iris/v12"

func main() {
  // Defina a instância do iris
  app := iris.New()
  // Use o middleware de compressão gzip
  app.Use(iris.Compression)

  // Configurações da rota
  app.Get("/", func(ctx iris.Context) {
    ctx.HTML("Olá <strong>%s</strong>!", "Mundo")
  })

  // Escute na porta
  app.Listen(":8080")
}

Middleware Personalizado no iris

// Assinatura da função de middleware personalizado
func Logger() iris.Handler {
    // Retorna o manipulador através de um closure
    return func(ctx iris.Context) {
        t := time.Now()

        // Define parâmetros
        ctx.Values().Set("framework", "iris")

        // Lógica antes da solicitação

        ctx.Next()

        // Lógica após a solicitação
        latency := time.Since(t)
        log.Print(latency)

        // Acesse o status sendo enviado
        status := ctx.GetStatusCode()
        log.Println(status)
    }
}

func main() {
    app := iris.New()
    // Registre o middleware personalizado
    app.Use(Logger())

    app.Get("/test", func(ctx iris.Context) {
        // Leia o parâmetro definido pelo middleware
        framework := ctx.Values().GetString("framework")

        // Isso imprimiria: "iris"
        log.Println(framework)
    })

    app.Listen(":8080")
}