De cero a junior: 5 proyectos en Go que explotarán tu portafolio

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Por qué Go es tu boleto de oro al mundo del backend

\n

Si 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.

\n

Los 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\n

Proyecto n.º 1: API RESTful para acortar enlaces (URL Shortener)

\n

¿Por qué es importante?

\n

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

\n

Crearemos 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).

\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

¿Qué mejorarás?

\n
    \n
  • Trabajo con sync.RWMutex para acceso concurrente
  • \n
  • Serialización JSON
  • \n
  • Arquitectura limpia sin frameworks
  • \n
\n

Este proyecto para portafolio en Go demostrará que entiendes cómo funcionan las cosas "bajo el capó".

\n\n

Proyecto n.º 2: Utilidad CLI para monitoreo del sistema

\n

¿Por qué incluirlo en el portafolio?

\n

Go 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.

\n\n

Código: Monitoreo de CPU y memoria

\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