Por que Go é seu bilhete de ouro para o mundo do backend
\nSe 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.
\nOs 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\nProjeto nº 1: API RESTful para encurtamento de links (URL Shortener)
\nPor 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\nO que vamos escrever?
\nCriaremos 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).
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\nO que você vai aprimorar?
\n- \n
- Trabalho com
sync.RWMutexpara acesso concorrente \n - Serialização JSON \n
- Arquitetura limpa sem frameworks \n
Este projeto para portfólio em Go mostrará que você entende como as coisas funcionam "por baixo dos panos".
\n\nProjeto nº 2: Utilitário CLI para monitoramento do sistema
\nPor que isso no portfólio?
\nGo é 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.
Código: Monitoramento de CPU e memória
\npackage 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