2
respostas

[Dúvida] Rota para apresentar todas as Personalidades apresenta o "Home Page"

Olá Pessoal,

Estou seguindo passo a passo, com algumas pequenas modificações, o que é apresentado na aula. Fiz, e tenho revisado isso minunciosamente, tudo que é pedido para apresentar os dados "fake" de personalidades como JSON, contudo ao subir o servidor, que não acusa qualquer erro, e acessar o endpoint /api/personalidades o que tenho é o texto Home Page e não o JSON com as duas personalidades que configurei no slice fake, meu código está em:

https://github.com/Riverfount/go-rest-api/tree/Riverfount/issue1

Qualquer auxílio que possam me dar será bem vindo, inclusive se puderem me dar dicas de como debugar um código Golang, pois estou tendo contato com a linguagem pela primeira vez. Já fiz três cursos antes desse, estou seguindo à risca a Formação Go.

2 respostas

O mais engraçado é que, se eu colocar o código que serializa a resposta como JSON, que está no endpoint /api/presonalidades para a o endpoint /, ele apresenta os dados, então o que tá pegando é que mesmo meu código estando com os dois endpoints, mas somente o endpoint do /, função Home, está sendo executada e não importa o endpoit, pois se eu fizer uma requisição para um endpoint que não existe, tipo localhost:8000/nao/existe ele dá a mesma resposta em vez de um 404.

Fala Vicente! o problema no seu código está relacionado à forma como as rotas estão sendo configuradas e tratadas no seu servidor Go. Com base na descrição que você deu, tudo indica que você está registrando o handler Home como handler genérico para todas as rotas — ou seja, qualquer path que você acessar vai cair na função Home, e por isso sempre aparece "Home Page", mesmo acessando /api/personalidades.

Provável causa

Você provavelmente está usando algo como:

http.HandleFunc("/", Home)

E não está definindo corretamente o handler para /api/personalidades, ou ainda está usando HandleFunc("/", Home) antes de outras rotas específicas — e isso pega tudo como se fosse um "coringa".

Você precisa registrar as rotas específicas antes da rota raiz ("/"), ou usar um ServeMux personalizado para lidar melhor com isso. Exemplo corrigido:

func main() {
    mux := http.NewServeMux()

    mux.HandleFunc("/api/personalidades", TodasPersonalidades)
    mux.HandleFunc("/", Home)

    fmt.Println("Servidor rodando na porta 8000")
    log.Fatal(http.ListenAndServe(":8000", mux))
}

Isso garante que /api/personalidades seja tratado corretamente pela função TodasPersonalidades, e só o / vá para Home.

Já que você está começando com Go, algumas dicas pra debugar:

  1. Prints são seus amigos: Use fmt.Println() para ver o que está acontecendo dentro das funções.
  2. Logs: Use log.Printf() com mensagens mais descritivas.
  3. Delve Debugger: É o depurador oficial do Go. Se estiver usando VS Code, instale a extensão Go e você consegue debugar com breakpoints.
  4. Testes isolados: Crie funções pequenas e vá testando aos poucos.