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 APIs?



Go (Golang) é uma linguagem de programação compilada moderna, criada no Google. Ela combina o alto desempenho do C++ com a simplicidade do Python. Se você precisa escrever uma REST API rapidamente, Go é uma das melhores escolhas. Neste artigo, criaremos uma REST API completa em Go em 30 minutos, usando apenas a biblioteca padrão net/http. Você verá como é simples processar requisições HTTP, roteá-las e retornar respostas JSON.



Ao final do artigo, você será capaz de escrever sua própria API, que pode ser implantada em um servidor. Não usaremos frameworks de terceiros — apenas Go puro, o que torna o código leve e rápido.



Passo 1: Instalação do Go e criação do projeto



Instalação do Go

Se você ainda não tem o Go instalado, baixe a versão mais recente do site oficial. Siga as instruções para o seu sistema operacional. Após a instalação, verifique a versão no terminal:



go version


Você deve ver algo como go version go1.22.0 linux/amd64.



Criação do projeto

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



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


Agora a estrutura do projeto está pronta. Escreveremos todo o código em um único arquivo main.go para não complicar o exemplo.



Passo 2: Servidor HTTP simples em Go



Vamos começar com um servidor HTTP básico. Abra o arquivo main.go e adicione o seguinte código:



package main

import ( "fmt" "log" "net/http")

func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, REST API on Go!") })

log.Println("Servidor iniciado na porta 8080") log.Fatal(http.ListenAndServe(":8080", nil))}


Inicie o servidor com o comando go run main.go e abra o navegador em http://localhost:8080. Você verá uma mensagem de boas-vindas. Parabéns — seu primeiro servidor HTTP em Go está funcionando!



Análise do código

  • http.HandleFunc — registra um handler para a rota "/".
  • http.ListenAndServe — inicia o servidor na porta 8080.
  • log.Fatal — exibe um erro se o servidor não iniciar.


Passo 3: Adicionando roteamento e manipulação de JSON



Agora vamos adicionar suporte ao estilo REST: GET, POST, PUT, DELETE. Criaremos um simples "banco de dados" em memória (um slice de structs) e gerenciaremos uma lista de tarefas (todo list).



Estrutura de dados

Adicione em main.go a descrição da struct Task e um slice global:



type Task struct {    ID   int    `json:"id"`    Name string `json:"name"`}

var tasks []Taskvar nextID int = 1


Handlers de rotas

Criaremos um handler principal que analisará o método HTTP e chamará a função apropriada:



func tasksHandler(w http.ResponseWriter, r *http.Request) {    switch r.Method {    case http.MethodGet:        getTasks(w, r)    case http.MethodPost:        createTask(w, r)    default:        http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)    }}

func taskHandler(w http.ResponseWriter, r *http.Request) { // Extrai o ID da URL idStr := strings.TrimPrefix(r.URL.Path, "/tasks/") id, err := strconv.Atoi(idStr) if err != nil { http.Error(w, "Invalid task ID", http.StatusBadRequest) return }

switch r.Method { case http.MethodGet: getTask(w, r, id) case http.MethodPut: updateTask(w, r, id) case http.MethodDelete: deleteTask(w, r, id) default: http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) }}

Blogs

Book Recommendations