Kyrux
Voltar

Rotas e URLs

Definindo rotas

Em apps/<nome>/routes.go:

var URLPatterns = []router.URLPattern{
    router.Path("GET",    "/",                  views.HomeView,    "home"),
    router.Path("POST",   "/contato/",          views.ContatoView, "contato"),
    router.Path("GET",    "/posts/<slug:str>/",  views.PostView,    "post_detalhe"),
    router.Path("GET",    "/users/<id:int>/",    views.UserView,    "user_detalhe"),
    router.Path("DELETE", "/users/<id:int>/",    views.DeleteUser,  "user_delete"),
}

Parâmetros de path — tipos suportados

Sintaxe Exemplo de URL Descrição
<nome:str> /posts/meu-post/ Qualquer texto sem barra
<nome:string> /posts/meu-post/ Idêntico a str
<id:int> /users/42/ Número inteiro
<preco:float> /produto/9.99/ Número decimal
<slug:slug> /artigos/go-lang/ Texto sem barra
<uid:uuid> /item/550e8400.../ UUID
<resto:path> /arquivos/a/b/c Múltiplos segmentos (com barras)

Barra final — comportamento

O Kyrux aceita a rota com e sem barra automaticamente:

/contato   →  serve a view
/contato/  →  serve a view (sem redirect)

Não é necessário registrar as duas variantes.

Query string

Parâmetros de query (?chave=valor) funcionam em qualquer rota:

/busca?q=golang&page=2
/busca/?q=golang&page=2   ← ambas funcionam

Acesso na view via ctx.Query() (ver seção 6).

Resolução de URLs nos templates

<a href="{{ url "home" }}">Início</a>
<a href="{{ url "post_detalhe" }}">Post</a>
<form action="{{ url "contato" }}">...</form>

Registrar rotas avançadas (sem o CLI)

func Register(r *router.Router) {
    router.Include(r, URLPatterns)

    // Rota direta sem URLPattern:
    r.Handle("GET /ping", func(ctx *router.Context) {
        ctx.JSON(200, map[string]string{"status": "ok"})
    })
}