ミドルウェアを利用する

func main() {
	// デフォルトのミドルウェアが何もない router を作成する
	r := gin.New()

	// グローバルなミドルウェア
	// Logger ミドルウェアは GIN_MODE=release を設定してても、 gin.DefaultWriter にログを出力する
	// gin.DefaultWriter はデフォルトでは os.Stdout。
	r.Use(gin.Logger())

	// Recovery ミドルウェアは panic が発生しても 500 エラーを返してくれる
	r.Use(gin.Recovery())

	// 個別のルーティングに、ミドルウェアを好きに追加することもできる
	r.GET("/benchmark", MyBenchLogger(), benchEndpoint)

	// 認証が必要なグループ
	// authorized := r.Group("/", AuthRequired())
	// 下記と同一
	authorized := r.Group("/")
	// 個別のグループのミドルウェア。この例では、AuthRequired() ミドルウェアを認証が必要なグループに設定している。
	authorized.Use(AuthRequired())
	{
		authorized.POST("/login", loginEndpoint)
		authorized.POST("/submit", submitEndpoint)
		authorized.POST("/read", readEndpoint)

		// ネストしたグループ
		testing := authorized.Group("testing")
		testing.GET("/analytics", analyticsEndpoint)
	}

	// 0.0.0.0:8080 でサーバーを立てる
	r.Run(":8080")
}