🚀 O Quick é um gerenciador de rotas flexível e extensível para a linguagem Go. Seu objetivo é ser rápido e de alto desempenho, além de ser 100% compatível com net/http. O Quick é um projeto em constante desenvolvimento e está aberto para colaboração, todos são bem-vindos para contribuir. 😍
💡 Se você é novo na programação, o Quick é uma ótima oportunidade para começar a aprender a trabalhar com Go. Com sua facilidade de uso e recursos, você pode criar rotas personalizadas e expandir seu conhecimento na linguagem.
👍 Espero que possam participar e que gostem de Godar!!! 😍
🔍 O repositório de exemplos do Framework Quick Exemplos Quick.
Tarefa | Progresso |
---|---|
Desenvolver MaxBodySize metodos Post e Put | 100% |
Desenvolver Padrão de Testes Unitários | 90% |
Desenvolver Config em New(Config{}) não obrigatório | 100% |
Desenvolve suporte a Grupo de Rotas - Group Get e Post | 70% |
Desenvolver e relacionar ao Listen o Config | 30% |
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 | 100% |
Desenvolver Routes Método GET | 100% |
Desenvolver Routes Método GET aceitando Query String | 100% |
Desenvolver Routes Método GET aceitando Parametros | 100% |
Desenvolver Routes Método GET aceitando Query String e Parametros | 100% |
Desenvolver Routes Método GET aceitando expressão regular | 100.% |
Desenvolver Routes Método POST | 100% |
Desenvolver Routes Método POST aceitando JSON | 100% |
Desenvolver para o MÉTODO POST o parse JSON | 100% |
Desenvolver para o MÉTODO POST funções para acessar byte ou string do Parse | 100% |
Desenvolver para o MÉTODO PUT | 100% |
Desenvolver para o MÉTODO PUT o parse JSON | 100% |
Desenvolver para o MÉTODO PUT o parse JSON | 100% |
Desenvolver para o MÉTODO PUT funções para acessar byte ou string do Parse | 100% |
Desenvolver para o MÉTODO DELETE | 100% |
Desenvolver para o MÉTODO OPTIONS | 0.% |
Desenvolver para o MÉTODO CONNECT Veja mais | 0.% |
Desenvolver método para ListenAndServe | 100% |
Desenvolver método para ListenAndServeTLS (http2) | 0.% |
Desenvolver método para Facilitar a manipulação do ResponseWriter | 80% |
Desenvolver método para Facilitar a manipulação do Request | 80% |
Desenvolver suporte a ServeHTTP | 100% |
Desenvolver suporte a middlewares | 100% |
Desenvolver suporte a middleware compress | 100% |
Desenvolver suporte a middlewares cors | 100% |
Desenvolver suporte a middlewares logger | 100% |
Desenvolver suporte a middlewares maxbody | 100% |
Desenvolver suporte a middlewares msgid | 100% |
Desenvolver suporte a middlewares msguuid | 100% |
Desenvolve suporte Static Files | 0.% |
Desenvolver suporte Cors | 100.% |
Desenvolver suporte Cient Get | 100.% |
Desenvolver suporte Cient Post | 100.% |
Desenvolver suporte Cient Put | 100.% |
Desenvolver suporte Cient Delete | 100.% |
Desenvolver suporte Cient Fast Get | 90.% |
Desenvolver suporte Cient Fast Post | 80.% |
Desenvolver suporte Cient Fast Put | 80.% |
Desenvolver suporte Cient Fast Delete | 80.% |
package main
import "github.com/jeffotoni/quick"
func main() {
q := quick.New()
q.Get("/v1/user", func(c *quick.Ctx) error {
c.Set("Content-Type", "application/json")
return c.Status(200).SendString("Quick em ação ❤️!")
})
q.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() {
q := quick.New()
q.Get("/v1/customer/:param1/:param2", func(c *quick.Ctx) error {
c.Set("Content-Type", "application/json")
type my struct {
Msg string `json:"msg"`
Key string `json:"key"`
Val string `json:"val"`
}
return c.Status(200).JSON(&my{
Msg: "Quick ❤️",
Key: c.Param("param1"),
Val: c.Param("param2"),
})
})
q.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() {
q := quick.New()
q.Post("/v1/user", func(c *quick.Ctx) error {
var my My
err := c.BodyParser(&my)
if err != nil {
return c.Status(400).SendString(err.Error())
}
return c.Status(200).String(c.BodyString())
// ou
// c.Status(200).JSON(&my)
})
q.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}
Funcionalidades | Possui |
---|---|
🛣️ Gerenciador de Rotas | sim |
📁 Server Files Static | sim |
🚪 Grupo de Rotas | sim |
🌐 Middlewares | sim |
🚀 HTTP/2 support | sim |
🧬 Data binding for JSON, XML and form payload | sim |
🔍 Suporte para regex | sim |
Este repositório contém exemplos práticos do Framework Quick, um framework web rápido e leve, desenvolvido em Go. Os exemplos estão organizados em pastas separadas, cada uma contendo um exemplo completo de uso do framework em uma aplicação web simples. Se você tem algum exemplo interessante de uso do Framework Quick, sinta-se à vontade para enviar uma solicitação de pull request com sua contribuição. O repositório de exemplos do Framework Quick pode ser encontrado em aqui.
package main
import "github.com/jeffotoni/quick"
type My struct {
Name string `json:"name"`
Year int `json:"year"`
}
func main() {
q := quick.New()
q.Post("/v2/user", func(c *quick.Ctx) error {
var my My
err := c.Bind(&my)
if err != nil {
return c.Status(400).SendString(err.Error())
}
return c.Status(200).JSON(&my)
})
q.Listen("0.0.0.0:8080")
}
$ curl -i -XPOST -H "Content-Type:application/json" \
'localhost:8080/v2/user' \
-d '{"name":"Marcos", "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":"Marcos","year":1990}
package main
import (
"github.com/jeffotoni/quick"
"github.com/jeffotoni/quick/middleware/cors"
)
func main() {
q := quick.New()
q.Use(cors.New())
q.Get("/v1/user", func(c *quick.Ctx) error {
c.Set("Content-Type", "application/json")
return c.Status(200).SendString("Quick em ação com Cors❤️!")
})
q.Listen("0.0.0.0:8080")
}
package main
import "github.com/jeffotoni/quick"
func main() {
q := quick.New(quick.Config{
MaxBodySize: 5 * 1024 * 1024,
})
q.Get("/v1/user", func(c *quick.Ctx) error {
c.Set("Content-Type", "application/json")
return c.Status(200).SendString("Quick em ação com Cors❤️!")
})
q.Listen("0.0.0.0:8080")
}
package main
import "github.com/jeffotoni/quick"
func main() {
q := quick.New(quick.Config{
MaxBodySize: 5 * 1024 * 1024,
})
v1 := q.Group("/v1")
v1.Get("/user", func(c *quick.Ctx) error {
return c.Status(200).SendString("[GET] [GROUP] /v1/user ok!!!")
})
v1.Post("/user", func(c *quick.Ctx) error {
return c.Status(200).SendString("[POST] [GROUP] /v1/user ok!!!")
})
v2 := q.Group("/v2")
v2.Get("/user", func(c *quick.Ctx) error {
c.Set("Content-Type", "application/json")
return c.Status(200).SendString("Quick em ação com [GET] /v2/user ❤️!")
})
v2.Post("/user", func(c *quick.Ctx) error {
c.Set("Content-Type", "application/json")
return c.Status(200).SendString("Quick em ação com [POST] /v2/user ❤️!")
})
q.Listen("0.0.0.0:8080")
}
package main
import (
"io"
"strings"
"testing"
"github.com/jeffotoni/quick"
)
func TestQuickExample(t *testing.T) {
// Here is a handler function Mock
testSuccessMockHandler := func(c *quick.Ctx) error {
c.Set("Content-Type", "application/json")
b, _ := io.ReadAll(c.Request.Body)
resp := `"data":` + string(b)
return c.Byte([]byte(resp))
}
q := quick.New()
// Here you can create all routes that you want to test
q.Post("/v1/user", testSuccessMockHandler)
q.Post("/v1/user/:p1", testSuccessMockHandler)
wantOutData := `"data":{"name":"jeff", "age":35}`
reqBody := []byte(`{"name":"jeff", "age":35}`)
reqHeaders := map[string]string{"Content-Type": "application/json"}
data, err := q.QuickTest("POST", "/v1/user", reqHeaders, reqBody)
if err != nil {
t.Errorf("error: %v", err)
return
}
s := strings.TrimSpace(data.BodyStr())
if s != wantOutData {
t.Errorf("was suppose to return %s and %s come", wantOutData, s)
return
}
t.Logf("\nOutputBodyString -> %v", data.BodyStr())
t.Logf("\nStatusCode -> %d", data.StatusCode())
t.Logf("\nOutputBody -> %v", string(data.Body())) // I have converted in this example to string but comes []byte as default
t.Logf("\nResponse -> %v", data.Response())
}
package main
import (
"github.com/jeffotoni/quick"
"github.com/jeffotoni/quick/middleware/msgid"
)
func main() {
q := quick.New()
q.Use(msgid.New())
q.Get("/v1/user/{id:[0-9]+}", func(c *quick.Ctx) error {
c.Set("Content-Type", "application/json")
return c.Status(200).String("Quick ação total!!!")
})
q.Listen("0.0.0.0:8080")
}
Já temos diversos exemplos, e já podemos testar e brincar 😁. É claro, estamos no início, ainda tem muito para fazer. Fiquem à vontade em fazer PR (com risco de ganhar uma camiseta Go ❤️ e claro reconhecimento como profissional Go 😍 no mercado de trabalho).
O Projeto Quick visa desenvolver e disponibilizar softwares de qualidade para a comunidade de desenvolvedores. 💻 Para continuarmos a melhorar nossas ferramentas, contamos com o apoio de nossos patrocinadores no Patreon. 🤝
Agradecemos a todos os nossos apoiadores! 🙌 Se você também acredita em nosso trabalho e quer contribuir para o avanço da comunidade de desenvolvimento, considere apoiar o Projeto Quick em nosso Patreon aqui
Juntos podemos continuar a construir ferramentas incríveis! 🚀
Avatar | User | Donation |
---|---|---|
@jeffotoni | x 10 | |
@Crow3442 | x 5 | |
@Guilherme-De-Marchi | x 5 |