package main import ( "net/http" "github.com/labstack/echo" "github.com/labstack/echo/middleware" ) type ( Host struct { Echo *echo.Echo } ) func main() { // Hosts hosts := make(map[string]*Host) //----- // API //----- api := echo.New() api.Use(middleware.Logger()) api.Use(middleware.Recover()) hosts["api.localhost:1323"] = &Host{api} api.GET("/", func(c echo.Context) error { return c.String(http.StatusOK, "API") }) //------ // Blog //------ blog := echo.New() blog.Use(middleware.Logger()) blog.Use(middleware.Recover()) hosts["blog.localhost:1323"] = &Host{blog} blog.GET("/", func(c echo.Context) error { return c.String(http.StatusOK, "Blog") }) //--------- // Website //--------- site := echo.New() site.Use(middleware.Logger()) site.Use(middleware.Recover()) hosts["localhost:1323"] = &Host{site} site.GET("/", func(c echo.Context) error { return c.String(http.StatusOK, "Website") }) // Server e := echo.New() e.Any("/*", func(c echo.Context) (err error) { req := c.Request() res := c.Response() host := hosts[req.Host] if host == nil { err = echo.ErrNotFound } else { host.Echo.ServeHTTP(res, req) } return }) e.Logger.Fatal(e.Start(":1323")) }