Subdomain
This recipe routes requests to separate Echo instances based on the request
host, so each subdomain has its own routes and middleware. The instances are
combined with echo.NewVirtualHostHandler, which dispatches by host name.
Server
Section titled “Server”package main
import ( "context" "net/http"
"github.com/labstack/echo/v5" "github.com/labstack/echo/v5/middleware")
func main() { // Hosts vHosts := make(map[string]*echo.Echo)
//----- // API //-----
api := echo.New() api.Use(middleware.RequestLogger()) api.Use(middleware.Recover())
vHosts["api.localhost:1323"] = api
api.GET("/", func(c *echo.Context) error { return c.String(http.StatusOK, "API") })
//------ // Blog //------
blog := echo.New() blog.Use(middleware.RequestLogger()) blog.Use(middleware.Recover())
vHosts["blog.localhost:1323"] = blog
blog.GET("/", func(c *echo.Context) error { return c.String(http.StatusOK, "Blog") })
//--------- // Website //---------
site := echo.New() site.Use(middleware.RequestLogger()) site.Use(middleware.Recover())
vHosts["localhost:1323"] = site
site.GET("/", func(c *echo.Context) error { return c.String(http.StatusOK, "Website") })
e := echo.NewVirtualHostHandler(vHosts)
sc := echo.StartConfig{Address: ":1323"} if err := sc.Start(context.Background(), e); err != nil { e.Logger.Error("failed to start server", "error", err) }}