Go y REPL: cómo la depuración sin consola no arruinó mi carrera

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

Introducción: «¿Y dónde está mi consola?»

\n\n

¿Alguna vez se ha sorprendido pensando: «Ahora mismo ejecutar rápidamente una línea de código, probar una hipótesis, experimentar con la sintaxis y luego seguir escribiendo»? Si viene a Go desde Python, JavaScript o Ruby, esta pregunta es especialmente relevante. Allí existe REPL (Read-Eval-Print Loop), un entorno interactivo donde el código se ejecuta línea por línea. Escribe 2 + 2 e inmediatamente ve 4. ¡Qué maravilla!

\n\n

Pero abre Go, escribe go run main.go, compila... y se da cuenta: no hay magia. ¿O sí? La pregunta «Does Go provide a REPL?» en Stack Overflow ha acumulado miles de visitas y decenas de comentarios. La gente se confunde, se decepciona y, a veces, incluso abandona el lenguaje.

\n\n

En este artículo, le contaré por qué Go no tiene un REPL incorporado, qué herramientas pueden reemplazarlo y, lo más importante, cómo evitar los errores típicos que convierten el aprendizaje de Go en un dolor de cabeza. ¡Allá vamos!

\n\n

¿Por qué Go no tiene REPL? (Y no es un error, es una característica)

\n\n

El primer error de un principiante es considerar la ausencia de REPL como una deficiencia del lenguaje. En realidad, es una decisión arquitectónica. Go es un lenguaje compilado y fuertemente tipado. REPL implica interpretación o compilación JIT, lo que contradice la filosofía de Go: «simplicidad, velocidad, previsibilidad».

\n\n

Cuando escribe en REPL en Python, el intérprete ejecuta el código línea por línea. En Go, cada programa primero se analiza, se compila en código máquina y luego se ejecuta. Esto proporciona:

\n
    \n
  • Velocidad de ejecución ultrarrápida (sin sorpresas en producción);
  • \n
  • Verificación estricta de tipos en tiempo de compilación (menos errores en tiempo de ejecución);
  • \n
  • Menos magia (sabe exactamente lo que hace su código).
  • \n
\n\n

Pero, ¿qué pasa con los experimentos rápidos? ¿Tendrá que crear un archivo main.go cada vez? Spoiler: no.

\n\n

Top 3 errores al trabajar sin REPL (y cómo evitarlos)

\n\n

Error n.º 1: «Escribiré todo en un solo archivo y lo ejecutaré con go run»

\n\n

Este es el error más común. Los principiantes crean un archivo main.go gigante, meten todo el código allí, lo prueban con go run y luego se sorprenden de que el compilador se queje de variables o importaciones no utilizadas.

\n\n

Cómo evitarlo: Use Go Playground (play.golang.org). Es una herramienta web oficial que funciona como un mini-REPL. Escribe código, presiona «Run» y ve el resultado. Sí, no es entrada línea por línea, pero para verificar sintaxis, algoritmos o fragmentos pequeños de código, es ideal.

\n\n

Ejemplo:

\n
package main\n\nimport "fmt"\n\nfunc main() {\n    message := "Hello, Go REPL!"\n    fmt.Println(message)\n}
\n

Lo ejecutó y obtuvo la salida. Rápido, limpio, sin archivos adicionales.

\n\n

Error n.º 2: «El REPL en Go es simplemente go run sin guardar»

\n\n

Algunos intentan usar go run como REPL: escriben código directamente en la terminal con echo o cat. Esto funciona solo para ejemplos triviales, pero tan pronto como aparecen importaciones, paquetes o errores de compilación, todo se rompe.

\n\n

Cómo evitarlo: Instale gore — es un REPL casi completo para Go. Permite ejecutar expresiones, declarar variables e incluso importar paquetes en modo interactivo.

\n\n

Instalación:

\n
go install github.com/motemen/gore@latest
\n

Ejecución:

\n
gore
\n

Ejemplo de uso:

\n
gore> 2 + 2\n4\ngore> import "fmt"\ngore> fmt.Println("Hello from gore!")\nHello from gore!
\n

No es perfecto, pero está muy cerca de un REPL clásico. Lo principal es no olvidar que es una herramienta de terceros y no admite todas las características del lenguaje (por ejemplo, las gorutinas en modo interactivo pueden comportarse de manera inesperada).

\n\n

Error n.º 3: «Escribiré pruebas en main() y las ejecutaré con

Blogs

Book Recommendations