Core Concepts

Classic Macaron

To get up and running quickly, macaron.Classicarrow-up-right provides some reasonable defaults that work well for most of web applications:

m := macaron.Classic()
// ... middleware and routing goes here
m.Run()

Below is some of the functionality macaron.Classicarrow-up-right pulls in automatically:

Instances

Any object with type macaron.Macaronarrow-up-right can be seen as an instance of Macaron, you can have as many instances as you'd like in a single piece of code.

Handlers

Handlers are the heart and soul of Macaron. A handler is basically any kind of callable function:

m.Get("/", func() string {
    return "hello world"
})

Non-anonymous function is also allowed for the purpose of using it in multiple routes:

Besides, one route can have as many as handlers you want to register with:

Return Values

If a handler returns something, Macaron will write the result to the current http.ResponseWriterarrow-up-right as a string:

You can also optionally return a status code (only applys for string and []byte types):

Service Injection

Handlers are invoked via reflection. Macaron makes use of Dependency Injectionarrow-up-right to resolve dependencies in a Handlers argument list. This makes Macaron completely compatible with golang's http.HandlerFuncarrow-up-right interface.

If you add an argument to your handler, Macaron will search its list of services and attempt to resolve the dependency via type assertion:

The most commonly used service in your code should be *macaron.Context:

The following services are included with macaron.Classicarrow-up-right:

Middleware Handlers

Middleware Handlers sit between the incoming HTTP request and the router. In essence they are no different than any other Handler in Macaron. You can add a middleware handler to the stack like so:

You can have full control over the middleware stack with the Handlers function. This will replace any handlers that have been previously set:

Middleware Handlers work really well for things like logging, authorization, authentication, sessions, gzipping, error pages and any other operations that must happen before or after an HTTP request:

Macaron Env

Some Macaron handlers make use of the macaron.Env global variable to provide special functionality for development environments vs production environments. It is recommended that the MACARON_ENV=production environment variable to be set when deploying a Macaron server into a production environment.

Handler Workflow

Handler Workflow

Last updated

Was this helpful?