Por qué Go es tu boleto de oro al mundo del backend
\nSi estás leyendo esto, seguramente ya sabes que Go (Golang) no es solo otro lenguaje de moda. Es el lenguaje en el que están escritos Docker, Kubernetes, Prometheus y la mitad de la infraestructura de internet moderno. Pero, ¿sabes qué diferencia a un desarrollador excelente de un principiante? No es el conocimiento de la sintaxis, sino los proyectos reales para portafolio en Go.
\nLos empleadores están cansados de las típicas "listas de tareas" en React. Necesitan personas que entiendan las gorutinas, sepan diseñar APIs y no tengan miedo de trabajar con la red. En este artículo no solo enumeraremos ideas — analizaremos 5 proyectos con fragmentos de código reales que cubrirán el 90% de las preguntas en una entrevista. ¡Allá vamos!
\n\nProyecto n.º 1: API RESTful para acortar enlaces (URL Shortener)
\n¿Por qué es importante?
\nEsto es un clásico del género. Cualquier desarrollador backend debe saber levantar un servidor HTTP, trabajar con middleware y enrutamiento. El proyecto "acortador de enlaces" encaja perfectamente en los proyectos Golang para portafolio, ya que permite demostrar comprensión de estructuras, hashing y trabajo con bases de datos.
\n\n¿Qué escribiremos?
\nCrearemos un servidor simple con net/http (sin bibliotecas externas, para mostrar conocimiento de la biblioteca estándar). El servidor recibirá una URL larga y devolverá un código corto (por ejemplo, /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\n¿Qué mejorarás?
\n- \n
- Trabajo con
sync.RWMutexpara acceso concurrente \n - Serialización JSON \n
- Arquitectura limpia sin frameworks \n
Este proyecto para portafolio en Go demostrará que entiendes cómo funcionan las cosas "bajo el capó".
\n\nProyecto n.º 2: Utilidad CLI para monitoreo del sistema
\n¿Por qué incluirlo en el portafolio?
\nGo es famoso por sus utilidades de consola. Escribir tu propio top o htop es una excelente manera de mostrar trabajo con llamadas al sistema y gorutinas. Este es uno de los proyectos más útiles para portafolio en Go, porque está cerca de tareas reales de DevOps.
Código: Monitoreo de CPU y memoria
\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