O quick é um gerenciador de rotas para Go, onde sua sintaxe foi inspirado no framework fiber.
É um gerenciador de rotas minimalistico está nascendo e está em desenvolvimento constante, é para ser rápido e com alto desempenho 100% compatível com net/http.
O objetivo é didático, e colaboração, todos são bem vindos a ajudar. 😍
O foco será o desempenho, otimizações e muito testes unitários.
- [100%] Desenvolver MaxBodySize metodos Post e Put
- [100%] Desenvolver Config em New(Config{}) não obrigatório
- [70%] Desenvolve suporte a Grupo de Rotas - Group Get e Post
- [30%] Desenvolver e relacionar ao Listen o Config
- [100%] Criação de função print para não usar fmt de forma demasiada
- [100%] Criação de função própria para Concat String
- [100%] Criação de benchmarking entre os.Stdout e fmt.Println
- [50%] Desenvolver Routes Método GET
- [90%] Desenvolver Routes Método GET aceitando Query String
- [90%] Desenvolver Routes Método GET aceitando Parametros
- [90%] Desenvolver Routes Método GET aceitando Query String e Parametros
- [0.%] Desenvolver Routes Método GET aceitando expressão regular
- [80%] Desenvolver Routes Método POST
- [90%] Desenvolver Routes Método POST aceitando JSON
- [90%] Desenvolver para o MÉTODO POST o parse JSON
- [90%] Desenvolver para o MÉTODO POST funções para acessar byte ou string do Parse
- [80%] Desenvolver para o MÉTODO PUT
- [90%] Desenvolver para o MÉTODO PUT o parse JSON
- [90%] Desenvolver para o MÉTODO PUT o parse JSON
- [90%] Desenvolver para o MÉTODO PUT funções para acessar byte ou string do Parse
- [0.%] Desenvolver para o MÉTODO DELETE
- [0.%] Desenvolver para o MÉTODO OPTIONS
- [90%] Desenvolver método para ListenAndServe
- [0.%] Desenvolver método para ListenAndServeTLS (http2)
- [70%] Desenvolver método para Facilitar a manipulação do ResponseWriter
- [70%] Desenvolver método para Facilitar a manipulação do Request
- [70%] Desenvolver suporte a ServeHTTP
- [10%] Desenvolver suporte a middlewares
- [0.%] Desenvolve suporte Static Files
- [0.%] Desenvolver suporte Cors
Jà temos um exemplo, e já podemmos testar e brincar 😁, é claro estamos no inicio ainda tem muito para fechar e fiquem a vontade em fazerem PR (com risco de ganhar uma camiseta Go ❤️ e é claro notoriedade para trabalhar com Go 😍 no mercado de trabalho)
package main
import "github.com/jeffotoni/quick"
func main() {
app := quick.New()
app.Get("/v1/user", func(c *quick.Ctx) {
c.Set("Content-Type", "application/json")
c.Status(200).SendString("Quick em ação ❤️!")
})
app.Listen("0.0.0.0:8080")
}
$ curl -i -XGET -H "Content-Type:application/json" \
'localhost:8080/v1/user'
HTTP/1.1 200 OK
Content-Type: application/json
Date: Wed, 22 Feb 2023 07:45:36 GMT
Content-Length: 23
Quick em ação ❤️!%
package main
import "github.com/jeffotoni/quick"
func main() {
app := quick.New()
app.Get("/v1/customer/:param1/:param2", func(c *quick.Ctx) {
c.Set("Content-Type", "application/json")
type my struct {
Msg string `json:"msg"`
Key string `json:"key"`
Val string `json:"val"`
}
c.Status(200).Json(&my{
Msg: "Quick ❤️",
Key: c.Param("param1"),
Val: c.Param("param2"),
})
})
app.Listen("0.0.0.0:8080")
}
$ curl -i -XGET -H "Content-Type:application/json" \
'localhost:8080/v1/customer/val1/val2'
HTTP/1.1 200 OK
Content-Type: application/json
Date: Wed, 22 Feb 2023 07:45:36 GMT
Content-Length: 23
{"msg":"Quick ❤️","key":"val1","val":"val2"}
package main
import "github.com/jeffotoni/quick"
type My struct {
Name string `json:"name"`
Year int `json:"year"`
}
func main() {
app := quick.New()
app.Post("/v1/user", func(c *quick.Ctx) {
var my My
err := c.Body(&my)
if err != nil {
c.Status(400).SendString(err.Error())
return
}
c.Status(200).Json(&my)
})
app.Listen("0.0.0.0:8080")
}
$ curl -i -XPOST -H "Content-Type:application/json" \
'localhost:8080/v1/user' \
-d '{"name":"jeffotoni", "year":1990}'
HTTP/1.1 200 OK
Date: Wed, 22 Feb 2023 08:10:06 GMT
Content-Length: 32
Content-Type: text/plain; charset=utf-8
{"name":"jeffotoni","year":1990}
package main
import "github.com/jeffotoni/quick"
import "github.com/jeffotoni/quick/middleware/cors"
func main() {
app := quick.New()
app.Use(cors.New().Handler)
app.Get("/v1/user", func(c *quick.Ctx) {
c.Set("Content-Type", "application/json")
c.Status(200).SendString("Quick em ação com Cors❤️!")
})
app.Listen("0.0.0.0:8080")
}
package main
import "github.com/jeffotoni/quick"
func main() {
app := quick.New(quick.Config{
MaxBodySize: 5 * 1024 * 1024,
})
app.Get("/v1/user", func(c *quick.Ctx) {
c.Set("Content-Type", "application/json")
c.Status(200).SendString("Quick em ação com Cors❤️!")
})
app.Listen("0.0.0.0:8080")
}
package main
import "github.com/jeffotoni/quick"
func main() {
app := quick.New(quick.Config{
MaxBodySize: 5 * 1024 * 1024,
})
group := app.Group("/v1")
group.Get("/user", func(c *quick.Ctx) {
c.Status(200).SendString("[GET] [GROUP] /v1/user ok!!!")
return
})
group.Post("/user", func(c *quick.Ctx) {
c.Status(200).SendString("[POST] [GROUP] /v1/user ok!!!")
return
})
app.Get("/v2/user", func(c *quick.Ctx) {
c.Set("Content-Type", "application/json")
c.Status(200).SendString("Quick em ação com [GET] /v2/user ❤️!")
})
app.Post("/v2/user", func(c *quick.Ctx) {
c.Set("Content-Type", "application/json")
c.Status(200).SendString("Quick em ação com [POST] /v2/user ❤️!")
})
app.Listen("0.0.0.0:8080")
}