Do zero a júnior: 5 projetos em Go que vão explodir seu portfólio

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

Por que Go é seu bilhete de ouro para o mundo do backend

\n

Se você está lendo isso, provavelmente já sabe que Go (Golang) não é apenas mais uma linguagem da moda. É a linguagem na qual são escritos Docker, Kubernetes, Prometheus e metade da infraestrutura da internet moderna. Mas sabe o que diferencia um desenvolvedor experiente de um iniciante? Não é o conhecimento da sintaxe, mas sim projetos reais para portfólio em Go.

\n

Os empregadores estão cansados das mesmas "listas de tarefas" em React. Eles precisam de pessoas que entendam de goroutines, saibam projetar APIs e não tenham medo de trabalhar com rede. Neste artigo, não vamos apenas listar ideias — vamos analisar 5 projetos com trechos de código reais que cobrirão 90% das perguntas em uma entrevista. Vamos lá!

\n\n

Projeto nº 1: API RESTful para encurtamento de links (URL Shortener)

\n

Por que isso é importante?

\n

É um clássico do gênero. Qualquer desenvolvedor backend deve saber levantar um servidor HTTP, trabalhar com middleware e roteamento. O projeto "encurtador de links" se encaixa perfeitamente em projetos Golang para portfólio, pois permite demonstrar compreensão de estruturas, hashing e trabalho com bancos de dados.

\n\n

O que vamos escrever?

\n

Criaremos um servidor simples usando net/http (sem bibliotecas externas, para mostrar conhecimento da biblioteca padrão). O servidor receberá uma URL longa e retornará um código curto (por exemplo, /abc123).

\n\n
package main\n\nimport (\n    "crypto/rand"\n    "encoding/hex"\n    "encoding/json"\n    "fmt"\n    "net/http"\n    "sync"\n)\n\ntype URLStore struct {\n    mu   sync.RWMutex\n    data map[string]string\n}\n\nvar store = URLStore{data: make(map[string]string)}\n\nfunc generateShortID() string {\n    bytes := make([]byte, 4)\n    rand.Read(bytes)\n    return hex.EncodeToString(bytes)\n}\n\nfunc shortenHandler(w http.ResponseWriter, r *http.Request) {\n    if r.Method != http.MethodPost {\n        http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)\n        return\n    }\n\n    var req struct {\n        URL string `json:"url"`\n    }\n    if err := json.NewDecoder(r.Body).Decode(&req); err != nil {\n        http.Error(w, "Bad request", http.StatusBadRequest)\n        return\n    }\n\n    shortID := generateShortID()\n    store.mu.Lock()\n    store.data[shortID] = req.URL\n    store.mu.Unlock()\n\n    w.Header().Set("Content-Type", "application/json")\n    json.NewEncoder(w).Encode(map[string]string{\n        "short_url": fmt.Sprintf("http://localhost:8080/%s", shortID),\n    })\n}\n\nfunc redirectHandler(w http.ResponseWriter, r *http.Request) {\n    shortID := r.URL.Path[1:]\n    store.mu.RLock()\n    originalURL, ok := store.data[shortID]\n    store.mu.RUnlock()\n\n    if !ok {\n        http.NotFound(w, r)\n        return\n    }\n    http.Redirect(w, r, originalURL, http.StatusFound)\n}\n\nfunc main() {\n    http.HandleFunc("/shorten", shortenHandler)\n    http.HandleFunc("/", redirectHandler)\n    fmt.Println("Server started at :8080")\n    http.ListenAndServe(":8080", nil)\n}
\n\n

O que você vai aprimorar?

\n
    \n
  • Trabalho com sync.RWMutex para acesso concorrente
  • \n
  • Serialização JSON
  • \n
  • Arquitetura limpa sem frameworks
  • \n
\n

Este projeto para portfólio em Go mostrará que você entende como as coisas funcionam "por baixo dos panos".

\n\n

Projeto nº 2: Utilitário CLI para monitoramento do sistema

\n

Por que isso no portfólio?

\n

Go é famoso por seus utilitários de console. Escrever seu próprio top ou htop é uma excelente maneira de mostrar trabalho com chamadas de sistema e goroutines. Este é um dos projetos mais úteis para portfólio em Go, porque é próximo de tarefas reais de DevOps.

\n\n

Código: Monitoramento de CPU e memória

\n
package main\n\nimport (\n    "fmt"\n    "os"\n    "os/exec"\n    "strconv"\n    "strings"\n    "time"\n)\n\nfunc getCPUPercent() (float64, error) {\n    out, err := exec.Command("sh", "-c", "t                

Blogs

Book Recommendations