Voltar
Views e Context
Uma view é uma função func(ctx *router.Context).
func PostView(ctx *router.Context) {
slug := ctx.Param("slug") // parâmetro de path
page := ctx.QueryInt("page", 1) // query string com fallback
post := models.GetBySlug(slug)
if post == nil {
ctx.Error(404)
return
}
render.For("blog").Render(ctx, "post.html", map[string]any{
"post": post,
"page": page,
})
}
⚠️ Nunca use
ctxem goroutines que vivem além do handler — o Context volta a um pool quando o handler retorna e é reutilizado por outra requisição. Para trabalho assíncrono, faça uma cópia:cp := ctx.Copy() // Params, dados e Request para leitura; Writer é nil go func() { processar(cp.Param("id")) }()
Métodos do Context
Parâmetros de path
ctx.Param("slug") // string — retorna "" se ausente
ctx.ParamInt("id") // (int, bool) — (0, false) se inválido
Query string
ctx.Query("q") // primeiro valor, "" se ausente
ctx.QueryDefault("order", "asc") // com fallback
ctx.QueryInt("page", 1) // int com fallback
ctx.QueryAll("tag") // []string — múltiplos valores do mesmo parâmetro
Respostas
// Renderizar HTML com template
render.For("meuapp").Render(ctx, "index.html", map[string]any{
"titulo": "Olá mundo",
})
// JSON
ctx.JSON(200, map[string]any{"id": 1, "nome": "Kyrux"})
// HTML inline
ctx.HTML(200, "<h1>Olá</h1>")
// Redirect
ctx.Redirect("/login/", http.StatusFound) // 302
ctx.Redirect("/home/", http.StatusMovedPermanently) // 301
// Página de erro
ctx.Error(404)
ctx.Error(403)
ctx.Error(500)
Dados internos do contexto (entre middlewares)
// Guardar
ctx.Set("usuario", usuario)
// Recuperar
v, ok := ctx.Get("usuario")
usuario := v.(*models.Usuario)
Acesso direto ao request e writer
ctx.Request // *http.Request
ctx.Request.Method // "GET", "POST", etc.
ctx.Request.Header // http.Header
ctx.Writer // http.ResponseWriter