GoSuda

¿Qué hay de nuevo en Go 1.24?

By Lemon Mint
views ...

Go 1.24 se perfila como una versión significativa, introduciendo una serie de mejoras centradas en el rendimiento, la seguridad y la experiencia del desarrollador. Estos cambios tienen como objetivo hacer que Go sea aún más potente y eficiente para la construcción de aplicaciones modernas.

Mejora del Rendimiento

Una mejora general del rendimiento con una reducción del 2-3% en la sobrecarga de la CPU en un conjunto de benchmarks representativos. Estas mejoras incluyen una nueva implementación de mapa incorporada, una asignación de memoria más eficiente de objetos pequeños y una nueva implementación de mutex interno en tiempo de ejecución. Los resultados pueden variar según la aplicación.

Criptografía Post-Cuántica

Introducción del paquete crypto/mlkem, que implementa ML-KEM-768 y ML-KEM-1024. ML-KEM es un mecanismo de intercambio de claves post-cuántico anteriormente conocido como Kyber y especificado en FIPS 203. Esta adición prepara a Go para el futuro de la seguridad criptográfica.

Mejora de TLS

Soporte para Encrypted Client Hello (ECH) en TLS. Esta característica se puede habilitar completando el campo Config.EncryptedClientHelloKeys, mejorando la privacidad y la seguridad para las conexiones TLS.

Nuevo Mapa de Tabla Suiza

Una implementación de mapa mejorada para un mejor rendimiento. Esta nueva implementación se basa en Tablas Suizas, y se puede deshabilitar con el flag de compilación GOEXPERIMENT=noswissmap.

Actualización de Mapa de Sincronización

Rendimiento mejorado para las modificaciones de mapas en sync.Map. Es mucho menos probable que las modificaciones de conjuntos disjuntos de claves entren en conflicto en mapas más grandes, y ya no se requiere ningún tiempo de aumento para lograr cargas de baja contención desde el mapa. Si encuentra problemas, puede volver a la implementación anterior utilizando GOEXPERIMENT=nosynchashtriemap.

Marshalling JSON Mejorado

Una nueva opción de etiqueta omitempty para la omisión más inteligente de campos de estructura durante el marshaling JSON. Al realizar el marshaling, un campo de estructura con la opción omitempty se omitirá si su valor es cero. Si el tipo de campo tiene un método IsZero() bool, este se utilizará para determinar si el valor es cero.

Limpieza del Tiempo de Ejecución

Introducción de la función AddCleanup para reemplazar SetFinalizer para una mejor gestión de recursos. A diferencia de SetFinalizer, no resucita el objeto al que está adjunto para la finalización, y se pueden adjuntar varias limpiezas a un solo objeto. El nuevo código debería preferir AddCleanup sobre SetFinalizer.

Directivas de Herramientas en go.mod

Seguimiento mejorado de las dependencias ejecutables utilizando directivas de herramientas en go.mod. Esto elimina la necesidad de la solución anterior de agregar herramientas como importaciones en blanco a un archivo convencionalmente llamado “tools.go”.

Acceso Limitado por Directorio

Nuevo tipo os.Root para operaciones de sistema de archivos controladas. El tipo os.Root proporciona la capacidad de realizar operaciones del sistema de archivos dentro de un directorio específico, evitando el acceso fuera de la ruta especificada.

Mejoras en las Pruebas

Nuevo paquete testing/synctest para probar código concurrente. La función synctest.Run inicia un grupo de goroutines en una "burbuja" aislada, y la función synctest.Wait espera a que todas las goroutines en la burbuja actual se bloqueen. Este paquete es experimental y debe habilitarse configurando GOEXPERIMENT=synctest en tiempo de compilación.

Caché de Construcción

Los ejecutables go run ahora se almacenan en caché para una ejecución más rápida. Esto hace que las ejecuciones repetidas sean más rápidas a expensas de hacer que la caché sea más grande.

Rendimiento de Cgo

Nuevas anotaciones #cgo noescape y #cgo nocallback para un mejor rendimiento de Cgo. #cgo noescape cFunctionName le dice al compilador que la memoria pasada a la función C no se escapa. #cgo nocallback cFunctionName le dice al compilador que la función C no llama a ninguna función Go.

Punteros Débiles

Soporte para punteros débiles para hacer referencia de forma segura a la memoria sin impedir la recuperación. Los punteros débiles son una primitiva de bajo nivel proporcionada para permitir la creación de estructuras de memoria eficiente, como mapas débiles para asociar valores, mapas de canonicalizaciones y varios tipos de cachés.

Mejora de Benchmark

Nuevo método testing.B.Loop para benchmarks más rápidos y menos propensos a errores. La función benchmark se ejecutará exactamente una vez por -count, por lo que los pasos costosos de configuración y limpieza se ejecutan solo una vez. Los parámetros y resultados de las llamadas a funciones se mantienen activos, evitando que el compilador optimice completamente el cuerpo del bucle.

Go 1.24 se perfila como una versión significativa, que ofrece mejoras sustanciales en varios aspectos del lenguaje y su ecosistema.

Overview of Go 1.24