Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions conditional-routes/README.md
Original file line number Diff line number Diff line change
@@ -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
```
61 changes: 61 additions & 0 deletions conditional-routes/main.go
Original file line number Diff line number Diff line change
@@ -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")
}