Goa is under construction, if you are familiar with koa or go and interested in this project, please join us.
goa = go + koa
Just like koa, goa is also not bundled with any middleware. But you can expand functionality to meet your needs at will by middlware. It is flexible, light, high-performance and extensible.
$ go get -u github.com/goa-go/goa
func main() {
app := goa.New()
app.Use(func(c *goa.Context) {
c.String("Hello Goa!")
})
log.Fatal(app.Listen(":3000"))
}
Goa is a web framework based on middleware. Here is an example of using goa-router and logger.
package main
import (
"fmt"
"log"
"time"
"github.com/goa-go/goa"
"github.com/goa-go/router"
)
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()
r := router.New()
r.GET("/", func(c *goa.Context) {
c.String("Hello Goa!")
})
app.Use(logger)
app.Use(r.Routes())
log.Fatal(app.Listen(":3000"))
}
If you are unwilling to use goa-router, you can make a custom router middleware as you like.