Construir uma API passo a passo é a melhor forma de criar uma base sólida. Agora que nossa API já responde em formato JSON e com o Status Code correto, precisamos pensar em como identificar os registros da nossa aplicação de forma única e extremamente segura. Hoje vamos aprender o que é o UUID e como utilizá-lo no Go.
UUID significa Universally Unique Identifier (Identificador Único Universal). Trata-se de um padrão de identificador composto por uma sequência de 36 caracteres alfanuméricos (letras e números separados por hífens), estruturado assim: 123e4567-e89b-12d3-a456-426614174000.
A grande vantagem do UUID é a sua garantia matemática de exclusividade: a chance de gerar dois IDs idênticos no mundo é praticamente zero. Isso o torna perfeito para APIs modernas, pois evita que usuários adivinhem IDs sequenciais (como o aluno 1, aluno 2) e facilita a sincronização de dados entre múltiplos servidores.
O ecossistema Go evolui constantemente. Uma informação muito importante para o seu dia a dia de desenvolvedor:
crypto/rand e complementos internos.Como muitas empresas utilizam versões anteriores no mercado de trabalho, vamos aprender a instalar e utilizar a biblioteca padrão da comunidade criada pela própria equipe do Google.
Para baixar o pacote do UUID no seu projeto, abra o terminal do VSCode e digite o seguinte comando do Go:
go get github.com/google/uuid
Nota: Repare que o comando não utiliza o prefixo "https://", apenas o caminho direto do repositório. O Go se encarregará de atualizar o seu arquivo go.mod e fazer o download automático da biblioteca.
Abra o seu arquivo main.go e modifique-o para importar o novo pacote e gerar um código único dinâmico dentro da nossa rota:
// Pacote principal da aplicação
package main
// Importações: adicionamos o pacote externo do google
import (
"encoding/json"
"fmt"
"net/http"
"github.com/google/uuid"
)
// Função para retornar a nossa mensagem com um ID único
func helloWorld(w http.ResponseWriter, r *http.Request) {
// 1. Definir o cabeçalho como JSON
w.Header().Set("Content-Type", "application/json")
// 2. Definir o Status Code 201 (Created)
w.WriteHeader(http.StatusCreated)
// 3. Gerar um código único global convertido para texto (string)
codigoUnico := uuid.New().String()
// 4. Criar o JSON adicionando a chave do código único
mensagem := map[string]string{
"codigoUnico": codigoUnico,
"mensagem": "Hello World!",
}
// 5. Converter o map para JSON e retornar para o cliente
json.NewEncoder(w).Encode(mensagem)
}
// Função principal
func main() {
// Rotas
http.HandleFunc("GET /", helloWorld)
// Retornar o funcionamento do servidor
fmt.Println("Servidor em execução no endereço: http://localhost:8080")
// Configurar servidor
http.ListenAndServe(":8080", nil)
}
Se você estiver utilizando o Air, ele já terá recarregado a aplicação. Vá até o seu navegador e acesse http://localhost:8080.
Você verá um resultado semelhante a este na tela:
{"codigoUnico":"a7b2c891-d4e5-4321-9876-bcda12345678","mensagem":"Hello World!"}
O mais fantástico é fazer o seguinte teste: atualize a página (F5) algumas vezes. Note que a mensagem continua a mesma, mas a chave codigoUnico muda completamente a cada novo carregamento, provando que o nosso gerador está criando chaves inéditas em tempo real!