diff --git a/conditional-routes/README.md b/conditional-routes/README.md new file mode 100644 index 0000000..dc50c96 --- /dev/null +++ b/conditional-routes/README.md @@ -0,0 +1,21 @@ +# Conditional Routes + +This example demonstrates how to enable or disable routes using command-line flags and environment variables. + +## Run + +```bash +go run main.go +``` + +Enable admin routes: + +```bash +go run main.go --admin +``` + +Enable metrics endpoint: + +```bash +ENABLE_METRICS=true go run main.go +``` \ No newline at end of file diff --git a/conditional-routes/main.go b/conditional-routes/main.go new file mode 100644 index 0000000..71a5b5f --- /dev/null +++ b/conditional-routes/main.go @@ -0,0 +1,61 @@ +package main + +import ( + "flag" + "net/http" + "os" + + "github.com/gin-gonic/gin" +) + +func main() { + enableAdmin := flag.Bool("admin", false, "Enable admin routes") + flag.Parse() + + enableMetrics := os.Getenv("ENABLE_METRICS") == "true" + + r := gin.Default() + + // Public routes + r.GET("/", func(c *gin.Context) { + c.JSON(http.StatusOK, gin.H{ + "message": "Welcome to Gin", + }) + }) + + r.GET("/health", func(c *gin.Context) { + c.JSON(http.StatusOK, gin.H{ + "status": "UP", + }) + }) + + // Conditional admin routes + if *enableAdmin { + admin := r.Group("/admin") + { + admin.GET("/users", func(c *gin.Context) { + c.JSON(http.StatusOK, gin.H{ + "message": "Admin users endpoint", + }) + }) + + admin.GET("/settings", func(c *gin.Context) { + c.JSON(http.StatusOK, gin.H{ + "message": "Admin settings endpoint", + }) + }) + } + } + + // Conditional metrics route + if enableMetrics { + r.GET("/metrics", func(c *gin.Context) { + c.JSON(http.StatusOK, gin.H{ + "requests_total": 1234, + "uptime": "24h", + }) + }) + } + + r.Run(":8080") +}