Blazing fast Go Web Framework
go get github.com/plimble/ace
import"github.com/plimble/ace"Ace is very fast you can see on this
a:=ace.New()
a.GET("/:name", func(c*ace.C) {
name:=c.Param("name")
c.JSON(200, map[string]string{"hello": name})
})
a.Run(":8080")Default Middleware (Logger, Recovery)
a:=ace.Default()
a.GET("/", func(c*ace.C) {
c.String(200,"Hello ACE")
})
a.Run(":8080")a.DELETE("/", HandlerFunc)
a.HEAD("/", HandlerFunc)
a.OPTIONS("/", HandlerFunc)
a.PATCH("/", HandlerFunc)
a.PUT("/", HandlerFunc)
a.POST("/", HandlerFunc)
a.GET("/", HandlerFunc)a:=ace.New()
a.GET("/", func(c*ace.C){
c.String(200, "Hello world")
})
a.POST("/form/:id/:name", func(c*ace.C){
id:=c.Param("id")
name:=c.Param("name")
age:=c.Request.PostFormValue("age")
})data:=struct{
Namestring`json:"name"`
}{
Name: "John Doe",
}
c.JSON(200, data)c.String(200, "Hello Ace")//application/octet-streamc.Download(200, []byte("Hello Ace"))c.HTML("index.html")c.Redirect("/home")g:=a.Group("/people", func(c*ace.C) {
fmt.Println("before route func")
c.Next()
})
// /people/:nameg.GET("/:name", func(c*ace.C) {
c.JSON(200, map[string]string{"TEST": "GET METHOD"})
})
// /people/:nameg.POST("/:name", func(c*ace.C) {
c.JSON(200, map[string]string{"TEST": "POST METHOD"})
})Set/Get data in any HandlerFunc
a.Use(func(c*ace.C){
c.SetData("isLogin", true)
})
a.Get("/", func(c*ace.C){
isLogin:=c.GetData("isLogin").(bool)
//or get all data//c.GetAllData()
})a.Get("/", func(c*ace.C){
name:=c.MustPostString(key, default_value)
age:=c.MustPostInt(key, d)
q:=c.MustQueryString(key, default_value)
score:=c.MustQueryFloat64(key, default_value)
})a.Get("/", func(c*ace.C){
user:=struct{
Namestring`json:"name"`
}{}
c.ParseJSON(&user)
})Use panic instead of if err != nil for response error
a.Get("/save", func(c*ace.C){
user:=&User{}
c.ParseJSON(user)
//this func return error//if error go to panic handlerc.Panic(doSomething1(user))
c.Panic(doSomething2(user))
c.String(201, "created")
}
a.Get("/get", func(c*ace.C){
id:=c.Param("id")
user, err:=doSomeThing()
//if error go to panic handlerc.Panic(err)
c.JSON(200, user)
}a:=ace.New()
a.Panic(func(c*ace.C, rcvinterface{}){
switcherr:=rcv.(type) {
caseerror:
c.String(500, "%s\n%s", err, ace.Stack())
caseCustomError:
log.Printf("%s\n%s", err, ace.Stack())
c.JSON(err.Code, err.Msg)
}
})Ace middleware is implemented by custom handler
typeHandlerFuncfunc(c*C)a:=ace.New()
a.Use(ace.Logger())a.Static("/assets", "./img")You can use store from sessions
importgithub.com/plimble/sessions/store/cookiea:=ace.New()
store:=cookie.NewCookieStore()
a.Use(ace.Session(store, nil))
a.GET("/", func(c*ace.C) {
//get session namesession1:=c.Sessions("test")
session1.Set("test1", "123")
session1.Set("test2", 123)
session2:=c.Sessions("foo")
session2.Set("baz1", "123")
session2.Set("baz2", 123)
c.String(200, "")
})
a.GET("/test", func(c*C) {
session:=c.Sessions("test")
//get value from key test1 if not found default value ""test1:=session.GetString("test1", "")
test2:=session.GetInt("test2", 0)
c.String(200, "")
})a.Use(ace.Logger())Ace built on renderer interface. So you can use any template engine
typeRendererinterface {
Render(w http.ResponseWriter, namestring, datainterface{})
}| Name | Description |
|---|---|
| gzip | GZIP compress |
| cors | Enable Cross-origin resource sharing (CORS) |
| sessions | Sessions |
| pongo2 | Pongo2 Template Engine |
| csrf | Cross Site Request Forgery protection |
If you'd like to help out with the project. You can put up a Pull Request.
