应用程序(Goa)
Goa应用程序是一个包含一组中间件函数的对象,它是按照类似堆栈的方式组来执行的。
Use
应用程序可以通过中间件轻易地扩展功能,就像这样:
func logger(c *goa.Context) {
start := time.Now()
fmt.Printf(
"[%s] <-- %s %s\n",
start.Format("2006-01-02 15:04:05"),
c.Method,
c.URL,
)
c.Next()
fmt.Printf(
"[%s] --> %s %s %d %s\n",
time.Now().Format("2006-01-02 15:04:05"),
c.Method,
c.URL,
time.Since(start).Nanoseconds()/1e6,
"ms",
)
}
func main() {
app := goa.New()
app.Use(logger)
...
log.Fatal(app.Listen(":3000"))
}
Use方法是将中间件绑定在goa实例上,这里我们就使用了自定义的日志中间件。
如果这是你第一次接触中间件,查看更多关于中间件。
多个中间件级联:
app := goa.New()
router := router.New()
app.Use(logger.New())
app.Use(jwt.New())
app.Use(router.Routes())
...
Listen
Listen方法用于启动服务器。
以下是一个无作用的 Goa 应用程序被绑定到 3000 端口:
app := goa.New()
app.Listen(":3000")
实际上Listen只是以下方法的语法糖:
app := goa.New()
http.ListenAndServe(":3000", app)
这意味着你可以将同一应用程序同时跑在不同端口。
app := goa.New()
go func() {
http.ListenAndServe(":3000", app)
}()
http.ListenAndServe(":3001", app)
ServeHttp
ServeHttp使app实现http.Handler接口。 ServeHttp也可用作测试。
app := goa.New()
req, _ := http.NewRequest("GET", "/", nil)
w := httptest.NewRecorder()
app.ServeHTTP(w, req)
← 快速上手 上下文(Context) →