Usar Intermediário

func main() {
	// criar um roteador sem nenhum intermediário por padrão
	r := gin.New()

	// intermediário global
	// intermediário registador escreverá os registos ao "gin.DefaultWriter",
	// mesmo se definires com "GIN_MODE=release".
	// por padrão "gin.DefaultWriter = os.Stdout"
	r.Use(gin.Logger())

	// intermediário de recuperação recupera de quaisquer pânicos e
	// escreve um 500 se ouve um.
	r.Use(gin.Recovery())

	// intermediário por rota, podes adicionar tanto quanto desejares.
	r.GET("/benchmark", MyBenchLogger(), benchEndpoint)

	// grupo de autorização
	// authorized := r.Group("/", AuthRequired())
	// exatamente o mesmo que:
	authorized := r.Group("/")
	// intermediário por grupo! neste caso usamos o intermediário
	// "AuthRequired()" criado de maneira personalizada só no
	// grupo "authorized".
	authorized.Use(AuthRequired())
	{
		authorized.POST("/login", loginEndpoint)
		authorized.POST("/submit", submitEndpoint)
		authorized.POST("/read", readEndpoint)

		// grupo encaixado
		testing := authorized.Group("testing")
		testing.GET("/analytics", analyticsEndpoint)
	}

	// ouvir e servir no 0.0.0.0:8080
	r.Run(":8080")
}