Aprender
Início rápido
Do zero a uma página no navegador em cinco minutos, e o que aconteceu em cada passo.
Nesta trilha você constrói uma agenda de eventos: lista, página de detalhe, formulário para cadastrar, uma API JSON e uma área restrita. Cada capítulo adiciona um pedaço e termina com um desafio. Este primeiro só coloca o projeto de pé.
O que você precisa#
- Go 1.22 ou mais novo (
go version). - A pasta de binários do Go no
PATH:~/go/bin(o Go instala programas ali, e não em/usr/local/go/bin, que é onde fica o própriogo).
# se `trilha` não for encontrado depois do go install, adicione ao seu ~/.zshrc ou ~/.bashrc:
export PATH="$HOME/go/bin:$PATH"Instale e crie o projeto#
go install github.com/emersonjoe/trilha/cmd/trilha@latest
trilha new agenda
cd agenda
trilha devAbra http://localhost:3000. A página inicial já está lá. Deixe o trilha dev rodando: ele recompila e recarrega o navegador a cada arquivo salvo.
O que foi criado#
agenda/
├── go.mod
├── trilha_gen.go ← gerado pela CLI; commite, não edite
├── public/style.css ← servido em /style.css
└── app/
├── layout.go ← o <html> de todas as páginas
├── page.go ← GET /
├── not_found.go ← página 404
└── api/hello/route.go ← GET /api/helloA regra que sustenta tudo: uma pasta dentro de app/ é um caminho na URL. O arquivo dentro dela diz o que aquele caminho faz.
Sua primeira página#
Crie app/eventos/page.go:
package eventos
import (
"github.com/emersonjoe/trilha"
"github.com/emersonjoe/trilha/h"
)
func Page(c *trilha.Ctx) (h.Node, error) {
c.SetTitle("Eventos")
return h.Fragment(
h.H1(h.Text("Próximos eventos")),
h.P(h.Text("Ainda não há eventos cadastrados.")),
), nil
}Salve e visite /eventos. Três coisas aconteceram:
- A CLI viu a pasta nova, regenerou
trilha_gen.gocom a rota/eventose recompilou. Pagerodou e devolveu um nó de HTML, construído com o pacoteh.- O nó foi entregue ao
Layoutdeapp/layout.go, que colocou o<html>em volta, e o resultado foi enviado comContent-Type: text/html.
Desafio#
Crie app/sobre/page.go que responda /sobre com um título e um parágrafo, e adicione um link para ela na navegação do app/layout.go. Quando salvar, a página deve aparecer sem reiniciar nada.
Mostrar solução
// app/sobre/page.go
package sobre
import (
"github.com/emersonjoe/trilha"
"github.com/emersonjoe/trilha/h"
)
func Page(c *trilha.Ctx) (h.Node, error) {
c.SetTitle("Sobre")
return h.Fragment(
h.H1(h.Text("Sobre a agenda")),
h.P(h.Text("Uma agenda de eventos construída com Trilha.")),
), nil
}No app/layout.go, dentro do h.Nav(...):
h.A(h.Href("/sobre"), h.Text("Sobre")),