package main import ( "log" "net/http" "github.com/joho/godotenv" "github.com/labstack/echo/v4" "github.com/labstack/echo/v4/middleware" "goth.stack/api" "goth.stack/pages" ) func main() { // Load environment variables godotenv.Load(".env") // Initialize Echo router e := echo.New() // Middleware e.Use(middleware.Logger()) e.Use(middleware.Recover()) e.Pre(middleware.RemoveTrailingSlash()) e.Use(middleware.Logger()) e.Use(middleware.RequestID()) e.Use(middleware.Secure()) e.Use(middleware.GzipWithConfig(middleware.GzipConfig{ Level: 5, })) e.Use(middleware.RateLimiter(middleware.NewRateLimiterMemoryStore(50))) // Static server e.Static("/public", "public") // Page routes e.GET("/", pages.Home) e.GET("/blog", pages.Blog) e.GET("/post/:post", pages.Post) e.GET("/sse", pages.SSEDemo) // API Routes: apiGroup := e.Group("/api") apiGroup.GET("/ping", api.Ping) apiGroup.GET("/sse", api.SSE) apiGroup.POST("/sendsse", api.SSEDemoSend) // Start server with HTTP/2 support s := &http.Server{ Addr: ":3000", Handler: e, } e.Logger.Fatal(e.StartServer(s)) log.Println("Server started on port 3000") }