package main import ( "github.com/kataras/iris" "github.com/kataras/iris/mvc" "github.com/kataras/iris/middleware/logger" "github.com/kataras/iris/middleware/recover" ) // This example is equivalent to the // https://github.com/kataras/iris/blob/master/_examples/hello-world/main.go // // It seems that additional code you // have to write doesn't worth it // but remember that, this example // does not make use of iris mvc features like // the Model, Persistence or the View engine neither the Session, // it's very simple for learning purposes, // probably you'll never use such // as simple controller anywhere in your app. // // The cost we have on this example for using MVC // on the "/hello" path which serves JSON // is ~2MB per 20MB throughput on my personal laptop, // it's tolerated for the majority of the applications // but you can choose // what suits you best with Iris, low-level handlers: performance // or high-level controllers: easier to maintain and smaller codebase on large applications. func main() { app := iris.New() // Optionally, add two built'n handlers // that can recover from any http-relative panics // and log the requests to the terminal. app.Use(recover.New()) app.Use(logger.New()) app.Controller("/", new(IndexController)) app.Controller("/ping", new(PingController)) app.Controller("/hello", new(HelloController)) // http://localhost:8080 // http://localhost:8080/ping // http://localhost:8080/hello app.Run(iris.Addr(":8080")) } // IndexController serves the "/". type IndexController struct { // if you build with go1.9 you can omit the import of mvc package // and just use `iris.Controller` instead. mvc.Controller } // Get serves // Method: GET // Resource: http://localhost:8080/ func (c *IndexController) Get() { c.Ctx.HTML("Welcome!") } // PingController serves the "/ping". type PingController struct { mvc.Controller } // Get serves // Method: GET // Resource: http://localhost:8080/ping func (c *PingController) Get() { c.Ctx.WriteString("pong") } // HelloController serves the "/hello". type HelloController struct { mvc.Controller } type myJSONData struct { Message string `json:"message"` } // Get serves // Method: GET // Resource: http://localhost:8080/hello func (c *HelloController) Get() { c.Ctx.JSON(myJSONData{"Hello iris web framework."}) } /* Can use more than one, the factory will make sure that the correct http methods are being registered for each route for this controller, uncomment these if you want: func (c *HelloController) Post() {} func (c *HelloController) Put() {} func (c *HelloController) Delete() {} func (c *HelloController) Connect() {} func (c *HelloController) Head() {} func (c *HelloController) Patch() {} func (c *HelloController) Options() {} func (c *HelloController) Trace() {} */ /* func (c *HelloController) All() {} // OR func (c *HelloController) Any() {} */