FAQs
How do I integrate with existing servers?
Every Macaron instance implements http.Handler, so it can easily be used to serve subtrees on existing Go servers. For example this is a working Macaron app for Google App Engine:
package hello
import (
"net/http"
"gopkg.in/macaron.v1"
)
func init() {
m := macaron.Classic()
m.Get("/", func() string {
return "Hello world!"
})
http.Handle("/", m)
}How do I change the port/host?
Macaron's Run function looks for the PORT and HOST environment variables and uses those. Otherwise Macaron will default to localhost:4000. To have more flexibility over port and host, use the http.ListenAndServe function instead.
m := macaron.Classic()
// ...
log.Fatal(http.ListenAndServe(":8080", m))Or following ways:
m.Run("0.0.0.0"), listen on0.0.0.0:4000m.Run(8080), listen on0.0.0.0:8080m.Run("0.0.0.0", 8080), listen on0.0.0.0:8080
How do I graceful shutdown?
package main
import (
...
"net/http"
"gopkg.in/macaron.v1"
"gopkg.in/tylerb/graceful.v1"
)
func main() {
m := macaron.Classic()
...
mux := http.NewServeMux()
mux.Handle("/", m)
graceful.Run(":4000", 60*time.Second, mux)
}How do I pass data in request-level other than service inject?
There is a field called Data with type map[string]interface{} in *macaron.Context where you can store and retrieve any type of data. It comes with *macaron.Context so every request is independent.
See example here.
What's the idea behind this other than Martini?
Integrate frequently used middlewares and helper methods with less reflection.
Replace default router with faster multi-tree router.
Make it much easier to power Gogs project.
Make a deep source study against Martini.
Why Logo is a dragon?
Shouldn't it be some sort of dessert?
The transliteration of Macaron in Chinese is Maca Long, Long means dragon, so actually the Logo is a dragon whose name is Maca. Hah!
Live code reload?
Bra is the prefect fit for live reloading Macaron and other apps.
Last updated
Was this helpful?