Paquetes JSON Experimentales de Go 1.25: Mejora del Rendimiento y Sintaxis Más Estricta

2025-09-10

Go 1.25 introduce los paquetes experimentales `encoding/json/v2` y `encoding/json/jsontext` para mejorar las capacidades de codificación y decodificación JSON en Go. Estos abordan las deficiencias del paquete `encoding/json` existente, como el manejo impreciso de la sintaxis JSON, los cuellos de botella de rendimiento y las deficiencias de la API. Las mejoras incluyen un manejo más estricto de UTF-8 no válido, claves duplicadas y slices/maps nulos. El procesamiento de transmisión mejora significativamente el rendimiento, especialmente la deserialización. Si bien es en gran medida compatible con versiones anteriores, se anima a los desarrolladores a probar con `GOEXPERIMENT=jsonv2` y proporcionar comentarios.

Leer más
(go.dev)
Desarrollo

Módulo criptográfico Go FIPS 140-3 nativo: una solución segura y sencilla

2025-07-16

Go 1.24 y versiones posteriores ahora ofrecen soporte nativo para el cumplimiento de FIPS 140-3 a través de un nuevo módulo criptográfico desarrollado en colaboración con Geomys. Este módulo, validado por el certificado CAVP A6650 y en revisión CMVP, elimina los puntos de fricción anteriores para los usuarios de Go en entornos regulados. Ofrece una experiencia perfecta para los desarrolladores, con seguridad intransigente, utilizando ECDSA optimizado y un NIST DRBG basado en AES-256-CTR. Es compatible con una amplia gama de plataformas y algoritmos, superando las capacidades y la seguridad de su predecesor, Go+BoringCrypto. Este módulo nativo proporciona la ruta más fácil y segura para el cumplimiento de FIPS 140-3 para los desarrolladores de Go.

Leer más
(go.dev)
Desarrollo

Interfaces Genéricas en Go: Uso inteligente de interfaces genéricas para estructuras de árbol eficientes y adaptativas

2025-07-10

Este artículo explora el uso avanzado de interfaces genéricas en Go, en particular, cómo manejar elegantemente las restricciones de tipo al construir estructuras de datos como árboles de búsqueda binarios utilizando interfaces genéricas autorreferenciales. Utilizando una estructura de árbol como ejemplo, compara tres enfoques de implementación: usando `cmp.Ordered`, una función de comparación personalizada y una interfaz genérica autorreferencial. Finalmente, el artículo profundiza en la combinación de restricciones `comparable` para construir conjuntos ordenados y evitar las complejidades derivadas de los receptores de puntero, recomendando priorizar la simplicidad y la legibilidad en el diseño.

Leer más
(go.dev)
Desarrollo

La saga del manejo de errores en Go: El fin de una guerra sintáctica

2025-06-03

Después de años de intentos para mejorar el manejo de errores verboso en Go, el equipo de Go decidió abandonar los esfuerzos para cambiar la sintaxis del lenguaje. Propuestas como "check/handle", "try" y el operador "?" no lograron obtener un consenso generalizado. El artículo detalla esta historia, explicando la decisión basada en la falta de consenso, los altos costos de implementación y la adecuación de los enfoques existentes. El equipo argumenta que centrarse en mejores mecanismos y herramientas de manejo de errores es más productivo que buscar azúcar sintáctica, enfatizando la practicidad y la legibilidad en lugar de la brevedad del código.

Leer más
(go.dev)
Desarrollo

Go 1.25 elimina los tipos core, simplificando la especificación del lenguaje

2025-03-26

Go 1.18 introdujo genéricos y, con ello, el concepto de "tipos core" para simplificar el manejo de operandos genéricos. Sin embargo, esto añadió complejidad a la especificación del lenguaje y limitó la flexibilidad de ciertas operaciones. Go 1.25 elimina los tipos core, reemplazándolos con reglas más claras y concisas, simplificando así la especificación del lenguaje y abriendo la puerta a futuras mejoras del lenguaje, como operaciones de slice más potentes e inferencia de tipos mejorada. Este cambio no afecta el comportamiento de los programas Go existentes.

Leer más
(go.dev)

Go 1.24 mejora las capacidades de Wasm: reactores WASI y funciones exportadas

2025-02-14

Go 1.24 mejora significativamente el soporte de WebAssembly (Wasm) con la introducción de la directiva `go:wasmexport` y la capacidad de construir reactores WASI. Esto permite a los desarrolladores de Go exportar funciones a Wasm, permitiendo una integración perfecta con las aplicaciones host. El nuevo modo de reactor WASI facilita la ejecución continua de módulos Wasm que pueden reaccionar a múltiples eventos o solicitudes sin reinicialización. Si bien existen limitaciones, como la naturaleza de un solo hilo de Wasm y las restricciones de tipo, las mejoras de Go 1.24 allanan el camino para aplicaciones Wasm basadas en Go más potentes y versátiles.

Leer más
(go.dev)
Desarrollo

La nueva API opaca de Go Protobuf mejora el rendimiento y la seguridad

2024-12-16

El equipo de Go lanzó una nueva API opaca para Go Protobuf, que coexiste con la API de estructura abierta existente. Esta nueva API desacopla el código generado de su representación de memoria subyacente, lo que lleva a mejoras en el rendimiento, reducción de asignaciones de memoria y permite optimizaciones como la decodificación diferida. Al ocultar los campos de la estructura y acceder a ellos solo a través de métodos de acceso, evita errores relacionados con punteros y el intercambio accidental. La migración implica habilitar la API híbrida, usar la herramienta `open2opaque` y luego cambiar a la API opaca. La API de estructura abierta existente sigue siendo compatible.

Leer más
(go.dev)
Desarrollo