- Con motivo del 16.º aniversario del lanzamiento de Go como código abierto, se resumen los principales avances técnicos del último año y los planes a futuro
- En las versiones Go 1.24 y 1.25 se realizaron grandes mejoras en pruebas, seguridad y rendimiento
- Con
synctest, container-aware scheduling y flight recorder, entre otras funciones, se refuerzan la confiabilidad y la eficiencia en entornos de producción
- La preparación para la certificación FIPS 140-3 de los paquetes criptográficos y Green Tea GC mejoran la seguridad y el rendimiento
- El ecosistema de Go se está expandiendo hacia el desarrollo integrado con IA y la automatización moderna de código, con planes de fortalecer el soporte para hardware a gran escala e IA en el futuro
16 años de Go y panorama reciente de lanzamientos
- El 10 de noviembre se celebró el 16.º aniversario del lanzamiento de Go como código abierto
- En febrero de 2024 se lanzó Go 1.24 y en agosto Go 1.25, siguiendo el ciclo regular de lanzamientos
- Ambas versiones incluyen APIs para desarrollar software confiable, mejoras de seguridad y optimizaciones del rendimiento del runtime
- El equipo de Go está impulsando el desarrollo de integración con IA, agentes e infraestructura basados en Go para responder a los cambios de la era de la IA generativa
Mejoras clave en el lenguaje y la biblioteca estándar
- El paquete
testing/synctest, introducido de forma experimental en Go 1.24 y oficializado en 1.25, simplifica las pruebas de código asíncrono y paralelo
- Mediante virtualización del tiempo, convierte pruebas lentas o inestables en pruebas confiables e inmediatas
- Tiene una estructura profundamente integrada con el runtime de Go y la biblioteca estándar
- La API
testing.B.Loop mejora la usabilidad de la API de benchmarks existente (B.N) y resuelve varias trampas tradicionales
- Se añadieron APIs de limpieza de pruebas y salida de logs basadas en
Context, mejorando la eficiencia en la gestión de pruebas
- Go 1.25 introduce container-aware scheduling para ajustar automáticamente el paralelismo dentro de contenedores
- Evita el CPU throttling y mejora la latencia
- La función flight recorder amplía el trazador de ejecución para registrar en detalle los eventos inmediatamente anteriores a un error
Desarrollo de software centrado en la seguridad
- Los paquetes criptográficos de Go fueron auditados por la firma de seguridad independiente Trail of Bits y solo se detectó un único problema de baja severidad
- Gracias a la colaboración entre el Go Security Team y Geomys, se obtuvo la certificación CAVP y se completó la preparación para la certificación FIPS 140-3
- Esto mejora la viabilidad de usar Go en entornos regulados y reduce la dependencia de soluciones no oficiales previas
- La biblioteca estándar de Go sigue evolucionando hacia un enfoque safe by default
- La API
os.Root de Go 1.24 evita vulnerabilidades de path traversal al acceder al sistema de archivos
Mejoras internas y de rendimiento
- En Go 1.24, la implementación de
map fue rediseñada por completo para reflejar diseños modernos de tablas hash
- Mejora el rendimiento, reduce la latencia y optimiza la eficiencia de memoria
- El recolector de basura Green Tea de Go 1.25 reduce la sobrecarga del GC entre 10% y 40%
- Aplica nuevos algoritmos adaptados al hardware moderno
- En Go 1.26 se prevé una mejora adicional del 10% en hardware compatible con AVX-512
- Está previsto que se active por defecto a partir de Go 1.26
Expansión del stack de desarrollo e integración con IA
- Go está evolucionando más allá de un lenguaje hacia una plataforma completa de desarrollo
- El servidor de lenguaje gopls fortaleció sus funciones con cuatro lanzamientos regulares (v0.17~v0.20)
- Se añadieron analizadores de código, refactorización, manejo de etiquetas JSON y un servidor MCP integrado, entre otras funciones
- Se introdujo la función de modernización automática de código (modernizer)
- Convierte automáticamente patrones de código antiguos en formas modernas y seguras
- Al integrarse con las sugerencias del IDE, ayuda a mantener un código consistente y favorece el aprendizaje asistido por IA
- En Go 1.26, el comando
go fix será rediseñado para aplicar en lote todo el modernizer
- En colaboración con Anthropic y la comunidad, se publicó el SDK oficial de Go v1.0.0 para Model Context Protocol (MCP)
- Incluye soporte para clientes y servidores MCP, basado en las funciones MCP de gopls
- El ADK for Go de Google ofrece un framework para desarrollar sistemas multiagente sobre el SDK de MCP
- Esto demuestra que la concurrencia, el rendimiento y la confiabilidad de Go son adecuados para el desarrollo de IA en producción
Próximos planes y comunidad
- Se prevé la disponibilidad general de Green Tea GC, el soporte para hardware SIMD y una mayor escalabilidad multinúcleo
- Están en marcha una gran actualización de
encoding/json, profiling de fugas de goroutines y mejoras en net/http y unicode
- Se ampliarán el lenguaje, las herramientas y el sistema de diagnóstico para la convergencia entre Go e IA
- El proyecto open source de Go busca ampliar la comunidad de contribuyentes y la escalabilidad del proceso de desarrollo
- La evolución de Go se basa en las aportaciones de su comunidad de usuarios y contribuidores, y anticipa un crecimiento sostenido a futuro
1 comentarios
Opiniones en Hacker News
Me gusta muchísimo Go. Brilla especialmente en entornos de monorepo. Cuando agregas una aplicación nueva, solo haces una carpeta y pones un archivo go con una función
main(). Luego corresgo install ./...desde la raíz y todo compila rápido.Cuando necesitas crear un programa CLI rápido, esta simplicidad ha sido realmente una jugada maestra
Antes se decía que el lenguaje no era el cuello de botella, pero cuando vi Go por primera vez pensé: “esto es distinto”. También se aprende muy rápido; supongo que porque el lenguaje tiene una especificación pequeña.
Se siente como obtener el 80% de Rust con el 20% del esfuerzo
Para mí, Go es como un Rust excesivamente simplificado. La autocorrección de código, la obligación de usar ciertos bucles y hasta verificar si existe una clave en un map resultan incómodos.
Procesar arreglos o definir enums también se siente torpe, y por las reglas del linter de la empresa el código termina fragmentado, casi como Java empresarial.
Aun así, las interfaces son simples y se aprende rápido.
Si Go tuviera enums de verdad, una sintaxis de slices más natural, iterators y una sintaxis abreviada para desempaquetar resultados, sería mucho mejor
La librería json por defecto también tiene muchos problemas, como serializar slices vacíos como null.
Aun así, reconozco que la velocidad del tooling es muy buena y que es práctico
El tema del desempaquetado de resultados lleva años discutiéndose en la comunidad, pero todavía no hay una solución elegante
Si eliminas elementos con frecuencia en medio de un arreglo, entonces elegiste mal la estructura de datos
slices.Delete, y lo de obligarif err != nilno es un problema del lenguaje sino de reglas del equipoPor un momento me emocioné pensando que Go saldría para Apple II (referencia a SWEET16)
Es fácil contribuir a una base de código nueva en Go.
Gracias a la simplicidad del lenguaje y a herramientas estándar como gofmt y golangci-lint, todas las bases de código tienen una estructura parecida.
No existen esas discusiones sobre herramientas de build como en otras comunidades de lenguajes
Eso sí, me confundió la forma en que el operador
%maneja números negativosMe parece interesante la introducción de una herramienta automática de modernización de código (modernizer).
Desde gopls v0.18.0, analiza la sintaxis para encontrar patrones antiguos y transformarlos automáticamente en código más rápido y seguro.
Así como gofmt creó consistencia de estilo, modernizer creará consistencia en los modismos
Si activas linters como exhaustive, exhaustruct y wrapcheck en golangci-lint, la seguridad mejora mucho y el desarrollo se vuelve más rápido
En nuestra empresa tenemos un programa de onboarding de 10 semanas para desarrolladores backend en Go (enlace al plan)
Llevo 7 años desde que pasé de Python a Go, y eso fue un factor clave del éxito de la startup
Al principio desconfiaba de Go, pero ahora es mi lenguaje favorito. Es simple y poderoso.
Aun así, me gustaría que incluyera por defecto verificación de null, stack traces de errores y verificación exhaustiva de sum type
Creo que Go sería perfecto si tuviera un poco más de soporte para programación funcional.
Sobre todo se extrañan la inmutabilidad, el manejo de null y la exhaustividad en switch.
Lo complemento usando NilAway de Uber, pero sería mejor si estuviera soportado a nivel del sistema de tipos