9 puntos por lemonmint 2025-08-13 | Aún no hay comentarios. | Compartir por WhatsApp

[IMG] Overview

La versión Go 1.25 ya fue lanzada oficialmente. Esta versión incluye mejoras en herramientas, runtime, compilador y biblioteca estándar, y en particular presenta funciones experimentales importantes que los usuarios pueden probar con anticipación y sobre las que pueden enviar retroalimentación.

  • Características principales:
    • Se mantiene la compatibilidad con la versión Go 1
    • Mejoras amplias en herramientas, runtime, compilador y bibliotecas
    • Introducción de nuevas funciones experimentales (GreenTea GC, paquete json/v2)

Funciones experimentales clave

Go 1.25 incluye dos funciones experimentales principales orientadas a mejorar el rendimiento y las capacidades, que los usuarios pueden activar mediante variables de entorno.

Nuevo recolector de basura GreenTea (GC)

Su objetivo es mejorar el rendimiento reduciendo la sobrecarga del GC que aparece al manejar una gran cantidad de objetos pequeños.

  • Cómo funciona: agrupa los objetos pequeños de menos de 512 bytes en unidades de "memory span" de 8 KiB para ejecutar el GC. Con esto aumenta la localidad de memoria (locality) y maximiza la eficiencia de la caché de CPU.
  • Efectos esperados:
    • Mejora del rendimiento del GC al reducir el costo de saltos de memoria
    • Funcionamiento eficiente en entornos multinúcleo
    • Menor sobrecarga en la asignación de objetos pequeños y menos fragmentación de memoria
  • Cómo activarlo: configurar la variable de entorno GOEXPERIMENT=greenteagc al compilar
Nuevo paquete encoding/json/v2

Es una nueva implementación de JSON diseñada para resolver la falta de consistencia, el comportamiento poco predecible y los problemas de rendimiento del encoding/json (v1) existente.

  • Objetivos principales:

    • Mayor exactitud y previsibilidad: aplica reglas más estrictas por defecto (por ejemplo, diferencia entre mayúsculas y minúsculas, prohibición de claves duplicadas) para reducir comportamientos inesperados.
    • Mejoras de rendimiento: se rediseñó el motor de parsing y codificación para aumentar la eficiencia.
    • Más flexibilidad y control: se introdujo un sistema de opciones más sofisticado para que los desarrolladores puedan controlar con precisión cómo se procesa JSON.
  • Cambios principales (v2 frente a v1):

    • Coincidencia de nombres de campos: a diferencia del método insensible a mayúsculas/minúsculas de v1, v2 por defecto sí distingue exactamente entre mayúsculas y minúsculas.
    • Cambio en el significado de la etiqueta omitempty: mientras que v1 omitía según el "estado vacío" del valor de Go (0, false, nil, etc.), v2 omite según el "estado vacío" del valor JSON codificado (null, "", {}, []).
    • Manejo de slices y maps nil: v1 los serializaba como null, pero v2 por defecto los serializa respectivamente como [] (arreglo vacío) y {} (objeto vacío).
    • Deserialización de arreglos: v1 permitía que la longitud del arreglo JSON y la del arreglo Go no coincidieran, pero v2 exige que coincidan exactamente y, si no, devuelve un error.
    • Manejo de claves duplicadas: v1 permitía claves duplicadas (sobrescribiendo con el último valor), pero v2 por defecto devuelve un error, reforzando la exactitud y la seguridad.
    • Manejo de UTF-8 inválido: v1 reemplazaba automáticamente los caracteres UTF-8 inválidos (\uFFFD), pero v2 por defecto devuelve un error para evitar corrupción de datos.
  • Nuevas funciones y estructura:

    • Estructura modular: separa el análisis sintáctico de bajo nivel (paquete jsontext) de la transformación semántica de alto nivel (paquete json/v2), mejorando la claridad del código y el rendimiento.
    • Sistema de opciones potente: mediante json.Options se pueden controlar con precisión distintos comportamientos, e incluso es posible reproducir completamente el comportamiento de v1.
    • Manejo de tipos externos: mediante las opciones WithMarshalers y WithUnmarshalers, se puede inyectar lógica de serialización/deserialización para tipos de paquetes externos que no implementan las interfaces Marshaler/Unmarshaler.
  • Cómo activarlo: configurar la variable de entorno GOEXPERIMENT=jsonv2 al compilar

Cambios y mejoras principales

Esta versión incorpora diversas mejoras orientadas a aumentar la productividad de desarrollo y la eficiencia de ejecución de los programas.

  • Runtime

    • GOMAXPROCS consciente del entorno de contenedores: en Linux, detecta automáticamente los límites de CPU de cgroup para establecer el valor por defecto de GOMAXPROCS, y lo actualiza dinámicamente cuando cambian los recursos de CPU.
    • Trace Flight Recorder: ofrece una función de trazado liviana que registra continuamente trazas del runtime en un buffer circular en memoria para depurar bugs poco frecuentes.
  • Herramientas y compilador (Tools & Compiler)

    • Corrección de bug de puntero nil: se corrigió un bug del compilador presente desde Go 1.21 que retrasaba la verificación de punteros nil, por lo que el código que antes terminaba con éxito de forma anómala ahora genera el panic correspondiente.
    • Soporte para DWARF5: se usa la versión 5 de DWARF para la información de depuración, reduciendo el tamaño de los binarios y el tiempo de enlazado.
    • Nueva directiva go.mod ignore: permite configurar que el comando go ignore ciertos directorios.
  • Biblioteca estándar (Standard Library)

    • Se agrega el paquete testing/synctest: un nuevo paquete para facilitar las pruebas de código concurrente, permitiendo ejecutar pruebas de forma aislada dentro de un tiempo virtualizado.
    • Mejora de rendimiento en el paquete crypto: en modo FIPS, la velocidad de firma de ecdsa y ed25519 es 4 veces mayor, y también mejoró la velocidad de hashing SHA.
    • Se agrega net/http CrossOriginProtection: ofrece una nueva función para defenderse de ataques CSRF usando los metadatos Fetch de los navegadores modernos.

Cambios de puertos y soporte

  • macOS: desde Go 1.25 se requiere macOS 12 Monterey o superior.
  • Windows: el puerto de 32 bits windows/arm dejará de recibir soporte a partir de esta versión.

Aún no hay comentarios.

Aún no hay comentarios.