¿Qué Hay de Nuevo en Go 1.24?
Go 1.24 se está perfilando como una versión significativa, al introducir 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.
Performance Boost
Una mejora general del rendimiento con una reducción del 2-3% en la sobrecarga de CPU en un conjunto de benchmarks representativos. Estas mejoras incluyen una nueva implementación de map integrada, una asignación de memoria más eficiente de objetos pequeños y una nueva implementación de mutex interna del runtime. Los resultados pueden variar según la aplicación.
Post-Quantum Crypto
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 conocido anteriormente como Kyber y especificado en FIPS 203. Esta adición prepara a Go para el futuro de la seguridad criptográfica.
TLS Enhancement
Soporte para Encrypted Client Hello (ECH) en TLS. Esta característica se puede habilitar rellenando el campo Config.EncryptedClientHelloKeys
, mejorando la privacidad y la seguridad para las conexiones TLS.
New Swiss Table Map
Una implementación de map mejorada para un mejor rendimiento. Esta nueva implementación se basa en Swiss Tables y se puede desactivar con la bandera de compilación GOEXPERIMENT=noswissmap
.
Sync Map Update
Rendimiento mejorado para las modificaciones de map en sync.Map
. Las modificaciones de conjuntos disjuntos de claves tienen mucha menos probabilidad de contender en maps más grandes, y ya no se requiere un tiempo de aceleración para lograr cargas de baja contención desde el map. Si encuentra problemas, puede volver a la implementación anterior utilizando GOEXPERIMENT=nosynchashtriemap
.
Enhanced JSON Marshaling
Una nueva opción de etiqueta omitempty
para una omisión más inteligente de campos de struct durante el marshaling de JSON. Al realizar el marshaling, un campo de struct 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.
Runtime Cleanup
Introducción de la función AddCleanup
para reemplazar a 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 múltiples cleanups a un solo objeto. El código nuevo debería preferir AddCleanup
sobre SetFinalizer
.
Tool Directives in go.mod
Seguimiento mejorado de dependencias ejecutables utilizando tool directives en go.mod
. Esto elimina la necesidad de la solución anterior de agregar tools como importaciones en blanco a un archivo convencionalmente denominado “tools.go”.
Directory-Limited Access
Nuevo tipo os.Root
para operaciones controladas del filesystem. El tipo os.Root
proporciona la capacidad de realizar operaciones del filesystem dentro de un directorio específico, impidiendo el acceso fuera de la ruta especificada.
Testing Improvements
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 el momento de la compilación.
Build Cache
Los ejecutables de 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.
Cgo Performance
Nuevas anotaciones #cgo noescape
y #cgo nocallback
para un mejor rendimiento de Cgo. #cgo noescape cFunctionName
le indica al compilador que la memoria pasada a la función C no escapa. #cgo nocallback cFunctionName
le indica al compilador que la función C no llama a ninguna función Go.
Weak Pointers
Soporte para weak pointers para referenciar la memoria de forma segura sin impedir la recuperación. Los weak pointers son una primitiva de bajo nivel proporcionada para permitir la creación de estructuras eficientes en memoria, tales como weak maps para asociar valores, mapas de canonicalización y varios tipos de cachés.
Benchmark Improvement
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
, por lo que los pasos costosos de configuración e inicialización solo se ejecutan una vez. Los parámetros y resultados de las llamadas a funciones se mantienen activos, evitando que el compilador optimice completamente el cuerpo del loop.
Go 1.24 se está perfilando como una versión significativa, que ofrece mejoras sustanciales en varios aspectos del lenguaje y su ecosistema.