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:
nily 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.