11 puntos por GN⁺ 2025-11-16 | 1 comentarios | Compartir por WhatsApp
  • 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

 
GN⁺ 2025-11-16
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 corres go 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

    • Me pregunto si casi todos los demás lenguajes no podrían hacer prácticamente lo mismo
    • Creo que este tipo de casos de uso de monorepo debería mencionarse más seguido
  • 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

    • Lo bueno de Go es que puedes aprenderte todo el lenguaje en poco tiempo. Puedes entenderlo completo, incluyendo la concurrencia y sus trampas. En cambio, C# o C++ son tan complejos que casi nadie los entiende por completo
    • Como dijo Rob Pike, Go es un lenguaje diseñado para desarrolladores junior. También había un objetivo fuerte de reducir los tiempos de compilación dentro de Google. Por eso, si tienes dependencias sin usar, el compilador da error (fuente)
    • Que la especificación del lenguaje sea pequeña no significa necesariamente que sea simple. Por ejemplo, Swift tiene una especificación grande pero está definida de forma laxa. De hecho, llegué a encontrar un error en la gramática de literales enteros mientras leía la especificación de Go
    • Pero da pena que ese 20% restante de Rust represente el 80% de su utilidad
    • Además, Go también se está volviendo cada vez más complejo. Por ejemplo, desde que se añadieron los genéricos, ha perdido parte de su simplicidad
  • 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

    • Una de las desventajas de Go es su cultura de nombres de variables cortos. También es incómodo que el primer campo de un struct actúe como herencia, o que el control de acceso dependa de mayúsculas y minúsculas.
      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
    • Hice un fork del lexer/parser de Go y creé un lenguaje experimental con Result[T]/Option[T], sum type, iterator y tuple, entre otras cosas (proyecto agl)
    • Go sí tiene enum. Lo que no tiene es sum type. Los arrays y slices son casi iguales a los de C, y solo parecen más confusos porque les falta “magia”.
      El tema del desempaquetado de resultados lleva años discutiéndose en la comunidad, pero todavía no hay una solución elegante
    • En realidad, Go ya tiene el paquete iter y slices.Delete.
      Si eliminas elementos con frecuencia en medio de un arreglo, entonces elegiste mal la estructura de datos
    • Puedes borrar con slices.Delete, y lo de obligar if err != nil no es un problema del lenguaje sino de reglas del equipo
  • Por 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

    • Estoy intentando convencer a los científicos con los que trabajo de usar formatters y linters. Creo que obligarlo, como hace Go, fue una buena decisión
    • Apenas estoy empezando a aprender Go, pero me gusta esa filosofía de “hacerlo de una sola manera”.
      Eso sí, me confundió la forma en que el operador % maneja números negativos
  • Me 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

    • Eso sí, la mayoría de los puestos relacionados con Go piden conocimientos de DevOps (AWS, Kubernetes, CI/CD). Las posiciones de ingeniería de software pura son raras
    • Enlace directo
  • 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

    • Se está desarrollando NilAway como herramienta de verificación de null
    • La verificación de sum type se puede hacer con golangci-lint
  • 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

    • Existe un proyecto llamado Borgo, pero todavía está inmaduro
    • Sueño con un Go con sum type y sin punteros nil. Gleam va más o menos en esa dirección, pero terminó yéndose por un camino demasiado distinto