Pular para o conteúdo

Crie sua Primeira API REST com Go (Guia Prático para Iniciantes 2025)

A pergunta que separa teoria de prática é: como transformar uma ideia num servidor real, que recebe requisição e devolve dado pela internet? Muita gente que está começando acha que precisa de framework complexo e centenas de linha de código. A beleza do Go é a filosofia de simplicidade da própria biblioteca padrão — dá pra ter uma API rodando sem instalar nada além do próprio Go.

Resumo rápido

  • Esta é a versão “zero”: só net/http, sem framework, sem banco — dado em memória.
  • Se depois disso você quiser roteamento mais rico, tem o tutorial com Gin. Se quiser persistência real com banco, tem o guia com Go + PostgreSQL.
  • Meta: 20 minutos, do zero até um endpoint JSON funcionando de verdade.

Mindset Chave: O Poder do “Suficientemente Bom”

O objetivo aqui não é construir a API da Netflix. É entender o bloco de construção fundamental de qualquer API: receber um pedido (request) e enviar uma resposta (response). Essa base é o ponto de partida de toda aplicação back-end — foco no progresso, não na perfeição.

Construindo a API, Passo a Passo

1. Pré-requisitos

Tenha o Go instalado (guia oficial em go.dev/doc/install). Crie uma pasta (minha-primeira-api) e um arquivo main.go dentro dela.

2. Ligando o Servidor

package main

import (
    "fmt"
    "net/http"
)

// "handler": função que lida com requisição.
func homePage(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Bem-vindo à minha primeira API com Go!")
}

func main() {
    http.HandleFunc("/", homePage)
    fmt.Println("Servidor escutando na porta 8080...")
    http.ListenAndServe(":8080", nil)
}

Rode com go run main.go e acesse http://localhost:8080 — a mensagem de boas-vindas aparece.

3. Definindo os Dados

type Livro struct {
    ID     string `json:"id"`
    Titulo string `json:"titulo"`
    Autor  string `json:"autor"`
}

var livros = []Livro{
    {ID: "1", Titulo: "A Arte da Guerra", Autor: "Sun Tzu"},
    {ID: "2", Titulo: "O Príncipe", Autor: "Maquiavel"},
}

4. Criando o Endpoint `/livros`

func obterLivros(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    if err := json.NewEncoder(w).Encode(livros); err != nil {
        http.Error(w, "erro ao gerar resposta", http.StatusInternalServerError)
    }
}

func main() {
    http.HandleFunc("/", homePage)
    http.HandleFunc("/livros", obterLivros)
    fmt.Println("Servidor escutando na porta 8080...")
    http.ListenAndServe(":8080", nil)
}

Repare que já verificamos o erro do Encode aqui — em código de produção, ignorar erro de serialização é o tipo de detalhe que vira bug difícil de rastrear depois.

5. Testando

Reinicie o servidor (Ctrl+C, depois go run main.go de novo) e acesse http://localhost:8080/livros — um JSON com os dois livros aparece. Você criou e consumiu sua primeira API REST em Go.

Perguntas frequentes

Como busco um livro específico, tipo /livros/1? Com só net/http puro, isso exige parsing manual da URL — é justamente onde um roteador como gorilla/mux ou um framework como Gin economiza trabalho. Veja como isso fica com Gin.

Preciso de framework como Gin ou Echo? Pra API complexa, sim, simplifica muito roteamento, middleware e validação. Mas entender net/http puro primeiro, como fizemos aqui, ajuda a entender o que o framework está escondendo de você por baixo.

Como conecto isso a um banco de dados real? Trocando a lista em memória por uma consulta real — este guia mostra exatamente isso com Go e PostgreSQL, incluindo o roteamento HTTP completo.

Conclusão

Você foi além da teoria e construiu um servidor web funcional usando só o Go nativo — entendeu o ciclo de uma requisição HTTP, como estruturar dado com struct e como servir isso em JSON. A lógica pra servir uma lista de livro é a mesma pra servir usuário, produto ou vídeo. A semente de qualquer sistema back-end grande é exatamente essa.

Recomendação relacionada

The Go Programming Language

Escrito por Alan Donovan e Brian Kernighan, é a referência mais citada por quem quer entender Go a fundo, além do básico.

Ver na Amazon →

Como Associado Amazon, Visão Binária pode ganhar uma comissão sobre compras qualificadas feitas através deste link, sem custo adicional pra você.