Catorce años de Go

Catorce años después de su lanzamiento, el lenguaje Go es visto ampliamente como una infraestructura “aburrida pero fiable”: fácil de aprender, rápido de compilar, con herramientas sólidas y una biblioteca estándar que impulsa gran parte del ecosistema actual de cloud y DevOps (Docker, Kubernetes, Terraform y más). Los comentaristas contraponen el conjunto de características deliberadamente minimalista de Go con lenguajes más ricos pero más complejos como Rust, Java y Python, debatiendo compensaciones en torno a los generics, la falta de tipos suma y seguridad frente a null, el manejo de errores y la ergonomía de la concurrencia. Muchos ven la compatibilidad hacia atrás de Go y el despliegue en un solo binario como ventajas importantes para servicios de backend de larga duración, aunque otros critican sus limitaciones de diseño y el papel central de Google en su evolución.

Popularidad y percepción del lenguaje

  • Los comentaristas señalan que Go atrae tanto entusiasmo como “language bashing”, a menudo enmarcado como “Go no es Rust”.
  • Algunos sostienen que el bashing es una señal de popularidad y de equipos obligados a usar Go cuando preferirían otra cosa.
  • Varios ven que Go ha entrado en la categoría de “aburrido pero seguro”: menos hype, muy utilizado, menos defensa militante.

Estatuto de “moderno” y lenguajes pares

  • Go se percibe como uno de los lenguajes mainstream más jóvenes en comparación con Java/Python/C++.
  • A menudo se contrasta con Rust, Swift, Kotlin, Java, C#, JavaScript y Python en términos de características, seguridad y ecosistemas.

Curva de aprendizaje y experiencia de desarrollo

  • Muchos informan que Go es muy fácil de aprender, especialmente para desarrolladores de PHP/Python/Java/C.
  • Otros tienen dificultades con la sintaxis/semántica de Go y/o Rust y se les aconseja elegir uno, no ambos, y construir proyectos reales.
  • Las herramientas (formateador, linter, soporte del IDE, arnés de pruebas/benchmarks) son elogiadas repetidamente.

Fortalezas comúnmente elogiadas

  • Compilación rápida y binarios estáticos pequeños.
  • Biblioteca estándar sólida, especialmente para redes y HTTP.
  • Despliegue simple (un solo binario), buen encaje para cloud-native y herramientas CLI.
  • Los primitivos de concurrencia (goroutines, channels) se consideran potentes, con buen rendimiento.
  • La compatibilidad hacia atrás de Go 1 se destaca como un activo importante.

Críticas y características ausentes

  • Quejas frecuentes sobre:
    • nil y la falta de tipos option/result o seguridad frente a null.
    • Enums débiles y ausencia de tipos suma/pattern matching.
    • Manejo de errores verboso y fácil de olvidar (if err != nil).
    • Bordes ásperos en interfaces, generics y reflection.
  • Algunos ven Go como demasiado restrictivo/minimalista; otros aprecian esto porque reduce la sobreingeniería.

Concurrencia y panics

  • Debate sobre si Go realmente tiene una “gran ergonomía de concurrencia”.
  • Las comparaciones con Erlang/Elixir sugieren que los primitivos de Go son fáciles de usar pero difíciles de usar correctamente, con riesgos de race conditions y deadlocks.
  • El hecho de que un panic no recuperado en cualquier goroutine derribe todo el programa se ve como un defecto importante de diseño; hay un debate extendido sobre si los panics deberían ser recuperables y cómo se compara esto con Rust.

Filosofía de diseño, ecosistema y longevidad

  • Énfasis repetido en que Go mantiene deliberadamente pequeño el conjunto de características, priorizando la legibilidad y el mantenimiento sobre la expresividad.
  • Algunos se preocupan por la dependencia de Google; otros sostienen que el estado de código abierto y la adopción generalizada hacen que su futuro sea relativamente seguro.
  • Go se considera excelente para servicios de backend, herramientas de infra/devops y para “hacer cosas”, pero no una gran opción (hoy) para ML, computación científica, gráficos o trabajo pesado de escritorio/embebido.