---
id: 149c0672eec2caba57477612564e9368
author: Lemon Mint
title: 'Resumen de la versión Go 1.24: mapas Swiss Table, ML-KEM, os.Root y testing/synctest'
description: 'Visión técnica general de Go 1.24: mapas integrados basados en Swiss Table, crypto/mlkem (FIPS 203), TLS Encrypted Client Hello, runtime.AddCleanup, os.Root y testing/synctest.'
language: es
date: 2024-12-20T00:23:21.60729Z
path: /blog/posts/whats-new-in-go-1-24-z83ff24d2
category: release
---

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

## Mejora del rendimiento

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

## Criptografía poscuá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 poscuántico anteriormente conocido como Kyber y especificado en FIPS 203. Esta incorporación prepara a Go para el futuro de la seguridad criptográfica.

## Mejora de TLS

Soporte para Encrypted Client Hello (ECH) en TLS. Esta funcionalidad puede habilitarse mediante el campo `Config.EncryptedClientHelloKeys`, lo que mejora la privacidad y la seguridad de las conexiones TLS.

## Nuevo mapa Swiss Table

Una implementación de mapas mejorada para un mejor rendimiento. Esta nueva implementación se basa en Swiss Tables y puede desactivarse con la opción de compilación `GOEXPERIMENT=noswissmap`.

## Actualización de sync.Map

Mejora del rendimiento de las modificaciones de mapas en `sync.Map`. Las modificaciones de conjuntos disjuntos de claves tienen mucha menos probabilidad de competir por el acceso en mapas más grandes, y ya no se requiere ningún tiempo de calentamiento para alcanzar cargas de lectura con baja contención en el mapa. Si encuentra problemas, puede volver a la implementación anterior mediante `GOEXPERIMENT=nosynchashtriemap`.

## Codificación JSON mejorada

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

## Limpieza en tiempo de ejecución

Introducción de la función `AddCleanup` para reemplazar a `SetFinalizer` y lograr una mejor gestión de recursos. A diferencia de `SetFinalizer`, no resucita el objeto al que está asociada para su finalización, y pueden asociarse múltiples limpiezas a un único objeto. El código nuevo debe preferir `AddCleanup` frente a `SetFinalizer`.

## Directivas de herramientas en go.mod

Seguimiento mejorado de dependencias ejecutables mediante directivas de herramientas en `go.mod`. Esto elimina la necesidad de la solución anterior, que consistía en añadir herramientas como importaciones en blanco a un archivo denominado convencionalmente “tools.go”.

## Acceso limitado a directorios

Nuevo tipo `os.Root` para operaciones controladas sobre el sistema de archivos. El tipo `os.Root` permite realizar operaciones del sistema de archivos dentro de un directorio específico, impidiendo el acceso fuera de la ruta indicada.

## 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 de la burbuja actual se bloqueen. Este paquete es experimental y debe habilitarse estableciendo `GOEXPERIMENT=synctest` en el momento de la compilación.

## Caché de compilación

Los ejecutables de `go run` ahora se almacenan en caché para acelerar su ejecución. Esto hace que las ejecuciones repetidas sean más rápidas a costa de aumentar el tamaño de la caché.

## Rendimiento de Cgo

Nuevas anotaciones `#cgo noescape` y `#cgo nocallback` para mejorar el rendimiento de Cgo. `#cgo noescape cFunctionName` indica al compilador que la memoria pasada a la función C no escapa. `#cgo nocallback cFunctionName` indica al compilador que la función C no llama de vuelta a ninguna función de Go.

## Punteros débiles

Soporte para punteros débiles que permiten referenciar memoria de forma segura sin impedir su recuperación. Los punteros débiles son una primitiva de bajo nivel que permite crear estructuras eficientes en memoria, como mapas débiles para asociar valores, mapas de canonicalización y diversos tipos de cachés.

## Mejora de benchmarks

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

Go 1.24 se perfila como una versión significativa, con mejoras sustanciales en diversos aspectos del lenguaje y de su ecosistema.

![Overview of Go 1.24](/assets/images/whats-new-in-go1.24/overview.webp)
