Aprenda a criar uma API REST funcional com Go (Golang) do zero. Um guia passo a passo para iniciantes usando apenas a biblioteca padrão net/http
.

Nos últimos artigos, nós mergulhamos em conceitos poderosos. Desvendamos os superpoderes de engenharia do recursos do Go e entendemos o que é uma API, o sistema circulatório da internet.
Agora, é hora de unir esses dois mundos.
A pergunta que separa a teoria da prática é: como transformar as ideias em um servidor real, que recebe requisições e devolve dados pela internet? Muitos iniciantes pensam que para isso precisam de frameworks complexos e centenas de linhas de código.
A beleza do Go, como vimos, é sua filosofia de simplicidade e sua incrível biblioteca padrão.
Neste guia prático, “mão na massa”, vamos construir juntos sua primeira API REST funcional em Go. Do zero. Sem frameworks externos, usando apenas o que a linguagem já oferece nativamente. E o melhor: você terá tudo rodando no seu computador em menos de 20 minutos.
Mindset Chave: O Poder do “Suficientemente Bom”
Nosso objetivo hoje não é construir a API da Netflix. É entender os blocos de construção fundamentais de qualquer API: receber um pedido (request) e enviar uma resposta (response). Vamos criar um servidor simples, mas funcional. Essa base é o ponto de partida de TODAS as grandes aplicações back-end. Foco no progresso, não na perfeição.
Construindo a API, Passo a Passo
1. Pré-requisitos: A Bancada de Trabalho
Primeiro, garanta que você tem o Go instalado e configurado no seu sistema. Se precisar de ajuda, siga o guia oficial de instalação no site oficial de download do Go.
Agora, crie uma pasta para o nosso projeto (ex: minha-primeira-api
) e, dentro dela, crie um arquivo chamado main.go
. É aqui que toda a nossa mágica vai acontecer.
2. A Estrutura Básica: Ligando o Servidor
Vamos começar com o mínimo necessário para ter um servidor web rodando. Abra o main.go
e cole o seguinte código:
package main
import (
"fmt"
"net/http"
)
// Este é um "handler", uma função que lida com requisições.
func homePage(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Bem-vindo à minha primeira API com Go!")
}
func main() {
// Dizemos ao Go que a função homePage deve responder na rota "/"
http.HandleFunc("/", homePage)
// Ligamos o servidor na porta 8080.
// O 'nil' significa que estamos usando o multiplexador padrão do Go.
fmt.Println("Servidor escutando na porta 8080...")
http.ListenAndServe(":8080", nil)
}
Para rodar: Abra seu terminal, navegue até a pasta do projeto e execute go run main.go
. Agora, abra seu navegador e acesse http://localhost:8080
. Você deverá ver a nossa mensagem de boas-vindas!
3. Definindo Nossos Dados
Uma API serve dados. Vamos criar uma estrutura para representar livros e alguns dados de exemplo. Adicione o seguinte código ao seu main.go
:
// ... (acima do package main)
import (
"encoding/json" // Precisaremos deste pacote para converter nossos dados para JSON
"fmt"
"net/http"
)
// 'struct' é como definimos um tipo de objeto em Go
type Livro struct {
ID string `json:"id"`
Titulo string `json:"titulo"`
Autor string `json:"autor"`
}
// Vamos criar alguns dados de exemplo
var livros = []Livro{
{ID: "1", Titulo: "A Arte da Guerra", Autor: "Sun Tzu"},
{ID: "2", Titulo: "O Príncipe", Autor: "Maquiavel"},
}
// ... (o resto do código continua)
4. Criando nosso Primeiro “Endpoint” (/livros
)
Um “endpoint” é simplesmente uma URL onde sua API responde. Vamos criar um que devolve nossa lista de livros em formato JSON.
Crie uma nova função handler
e atualize a função main
:
// ... (após a função homePage)
func obterLivros(w http.ResponseWriter, r *http.Request) {
// Definimos o tipo de conteúdo da resposta como JSON
w.Header().Set("Content-Type", "application/json")
// Convertemos nossa lista de livros para JSON e a enviamos como resposta
json.NewEncoder(w).Encode(livros)
}
func main() {
http.HandleFunc("/", homePage)
// Novo endpoint para nossa lista de livros
http.HandleFunc("/livros", obterLivros)
fmt.Println("Servidor escutando na porta 8080...")
http.ListenAndServe(":8080", nil)
}
5. Testando a API Completa
Pare o servidor anterior no terminal (com Ctrl + C
) e rode novamente: go run main.go
.
Agora, acesse a nova URL no seu navegador: http://localhost:8080/livros
.
O resultado deverá ser um belo JSON com a lista dos nossos dois livros. Parabéns, você acabou de criar e consumir sua primeira API REST com Go!
Sabedoria do Especialista: A Regra do Tratamento de Erros
Nossa API é simples, mas em uma aplicação real, muitas coisas podem dar errado (o banco de dados pode falhar, o JSON pode ser inválido, etc.). A marca de um bom desenvolvedor Go é o tratamento explícito de erros. A função json.NewEncoder(w).Encode(livros)
na verdade retorna um erro. Em um código de produção, você sempre deve verificá-lo: err := json.NewEncoder(w).Encode(livros)
if err != nil { // Lidar com o erro aqui }
FAQ: Próximos Passos
- 1. E se eu quiser buscar um livro específico (ex:
/livros/1
)?- Você precisaria de um roteador mais avançado para extrair o ID da URL ou usar um framework. É um ótimo próximo passo para estudar!
- 2. Preciso de um framework como Gin ou Echo?
- Para APIs complexas, frameworks como o Gin Gonic ou site do Echo simplificam muito o roteamento, middlewares e validação. Mas entender o pacote
net/http
primeiro, como fizemos hoje, é fundamental.
- Para APIs complexas, frameworks como o Gin Gonic ou site do Echo simplificam muito o roteamento, middlewares e validação. Mas entender o pacote
- 3. Como eu conecto isso a um banco de dados real?
- Você usaria um pacote de driver de banco de dados para Go (ex: para PostgreSQL ou MySQL). Em vez de ler da nossa lista de exemplo
livros
, sua funçãoobterLivros
faria uma consulta ao banco de dados.
- Você usaria um pacote de driver de banco de dados para Go (ex: para PostgreSQL ou MySQL). Em vez de ler da nossa lista de exemplo
Conclusão: O Poder em Suas Mãos
Parabéns! Você foi além da teoria e construiu um servidor web funcional, uma API REST de verdade, usando apenas o poder nativo do Go. Você entendeu na prática o ciclo de uma requisição HTTP, como estruturar dados com structs
e como servi-los em formato JSON.
Este pequeno projeto é a semente de qualquer grande sistema back-end. A lógica para servir uma lista de livros é a mesma para servir uma lista de usuários, produtos ou vídeos. Você agora tem o conhecimento fundamental para construir a espinha dorsal de aplicações web complexas.