Lanzamiento de Go 1.25
(go.dev)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=greenteagcal 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 comonull, 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 (paquetejson/v2), mejorando la claridad del código y el rendimiento. - Sistema de opciones potente: mediante
json.Optionsse pueden controlar con precisión distintos comportamientos, e incluso es posible reproducir completamente el comportamiento de v1. - Manejo de tipos externos: mediante las opciones
WithMarshalersyWithUnmarshalers, se puede inyectar lógica de serialización/deserialización para tipos de paquetes externos que no implementan las interfacesMarshaler/Unmarshaler.
- Estructura modular: separa el análisis sintáctico de bajo nivel (paquete
-
Cómo activarlo: configurar la variable de entorno
GOEXPERIMENT=jsonv2al 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.
- 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
-
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 comandogoignore 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 deecdsayed25519es 4 veces mayor, y también mejoró la velocidad de hashing SHA. - Se agrega
net/httpCrossOriginProtection: ofrece una nueva función para defenderse de ataques CSRF usando los metadatos Fetch de los navegadores modernos.
- Se agrega el paquete
Cambios de puertos y soporte
- macOS: desde Go 1.25 se requiere macOS 12 Monterey o superior.
- Windows: el puerto de 32 bits
windows/armdejará de recibir soporte a partir de esta versión.
Aún no hay comentarios.