常见问题

如何集成到我已有的服务中?

每个 Macaron 实例 都实现了 http.Handler 接口,因此可以很容易地将它们以子集的形式集成到已有服务中。例如,您可以将 Macaron 应用集成到 GAE 中:
package hello
import (
"net/http"
"gopkg.in/macaron.v1"
)
func init() {
m := macaron.Classic()
m.Get("/", func() string {
return "Hello world!"
})
http.Handle("/", m)
}

如何修改监听地址和端口?

Macaron 的 Run 函数会首先根据环境变量 PORTHOST 来确定监听地址和端口。如果未找到相应设置,则会默认使用 localhost:4000。如果您想要更加灵活便利的方案,可以使用 http.ListenAndServe 函数来实现。
m := macaron.Classic()
// ...
log.Fatal(http.ListenAndServe(":8080", m))
或者以下方式:
  • m.Run("0.0.0.0"),监听在 0.0.0.0:4000
  • m.Run(8080),监听在 0.0.0.0:8080
  • m.Run("0.0.0.0", 8080),监听在 0.0.0.0:8080

如何优雅地终止程序(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)
}

除了注入服务以外,如何在同一个请求内传递数据?

对象 *macaron.Context 中包含一个类型为 map[string]interface{} 的字段 Data 可供您在同个请求的不同处理器之间传递数据。
可以到 这里 查看使用方法。

为什么不直接使用 Martini 而要另外创建一个框架?

  • 集成常用组件和方法来减少反射次数。
  • 使用速度更快的多叉树路由替换原本的路由层。
  • 更好地驱动 Gogs 项目。
  • 对 Martini 源码进行一次深度学习。

为什么 Logo 是一条龙?

不应该是一种甜品吗?
正所谓 马卡龙,此龙乃是名为 马卡 的龙,哈哈!

有代码实时编译运行工具吗?

Bra 可以作为 Macaron 及其它应用的实时编译运行工具。
Last modified 2yr ago
Copy link
On this page
如何集成到我已有的服务中?
如何修改监听地址和端口?
如何优雅地终止程序(Graceful Shutdown)?
除了注入服务以外,如何在同一个请求内传递数据?
为什么不直接使用 Martini 而要另外创建一个框架?
为什么 Logo 是一条龙?
有代码实时编译运行工具吗?