Como escrever uma API REST em Go em 30 minutos: guia passo a passo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: Por que Go é ideal para REST API?



Go (ou Golang) é uma linguagem de programação moderna e compilada, criada no Google. Ela combina o desempenho do C++ com a simplicidade do Python, tornando-se a escolha ideal para criar serviços web de alta carga e REST APIs. Ao contrário de muitas outras linguagens, Go possui suporte nativo a servidor HTTP, concorrência e compilação rápida.



Neste guia, criaremos passo a passo uma REST API completa para gerenciar uma lista de tarefas (Todo List). Você aprenderá a:

  • Configurar um servidor HTTP em Go
  • Trabalhar com requisições e respostas JSON
  • Implementar operações CRUD (Create, Read, Update, Delete)
  • Testar a API usando curl ou Postman


Todo o processo levará no máximo 30 minutos. Vamos lá!



1. Instalação e configuração do projeto



Antes de escrever código, certifique-se de que o Go está instalado. Você pode verificar isso com o comando:

go version


Se o Go não estiver instalado, baixe a versão mais recente no site oficial.



Crie um novo diretório para o projeto e inicialize o módulo:

mkdir go-rest-apicd go-rest-apigo mod init go-rest-api


Agora crie o arquivo main.go — todo o nosso código estará nele. Para facilitar o trabalho com rotas, usaremos a biblioteca padrão net/http, que já vem embutida no Go. Nenhuma dependência externa é necessária — esta é uma das principais vantagens da linguagem.



2. Definindo a estrutura de dados e o armazenamento



Vamos começar descrevendo o modelo de dados. Para simplificar, armazenaremos as tarefas na memória (em um slice), e não em um banco de dados. Criaremos a estrutura Task e um contador global de IDs:



package main

import ( "encoding/json" "log" "net/http" "strconv" "strings" "sync")

// Task representa uma tarefatype Task struct { ID int `json:"id"` Title string `json:"title"` Done bool `json:"done"`}

// Armazenamento de tarefas (em memória)var ( tasks []Task nextID int = 1 mu sync.Mutex)


Observe o sync.Mutex — ele é necessário para acesso thread-safe aos dados, já que o servidor Go pode processar requisições em paralelo.



3. Implementação das operações CRUD



Agora escreveremos os handlers principais para cada método HTTP. Usaremos o padrão de roteamento por URL:

  • GET /tasks — obter todas as tarefas
  • POST /tasks — criar uma nova tarefa
  • GET /tasks/{id} — obter uma tarefa pelo ID
  • PUT /tasks/{id} — atualizar uma tarefa
  • DELETE /tasks/{id} — deletar uma tarefa


3.1. Obtendo todas as tarefas (GET /tasks)

func getTasks(w http.ResponseWriter, r *http.Request) {    mu.Lock()    defer mu.Unlock()

w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(tasks)}


3.2. Criando uma tarefa (POST /tasks)

func createTask(w http.ResponseWriter, r *http.Request) {    var newTask Task    if err := json.NewDecoder(r.Body).Decode(&newTask); err != nil {        http.Error(w, "Invalid JSON", http.StatusBadRequest)        return    }

mu.Lock() newTask.ID = nextID nextID++ tasks = append(tasks, newTask) mu.Unlock()

w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusCreated) json.NewEncoder(w).Encode(newTask)}


3.3. Obtendo, atualizando e deletando por ID

Para essas operações, precisamos extrair o ID da URL. Na biblioteca padrão do Go não há um parser de caminhos embutido, então escreveremos uma pequena utilidade:



                

Blogs

Book Recommendations