1 puntos por GN⁺ 2024-02-08 | 1 comentarios | Compartir por WhatsApp
  • La versión Go 1.22 se lanzó 6 meses después de Go 1.21.
  • La mayoría de los cambios están en la implementación de la toolchain, el runtime y las librerías.
  • Se mantiene la promesa de compatibilidad de Go 1, y se espera que casi todos los programas en Go compilen y se ejecuten igual que antes.

Cambios en el lenguaje

  • Hay dos cambios en los bucles "for".
    • Antes, las variables declaradas por un bucle "for" se creaban una vez y se actualizaban en cada iteración, pero en Go 1.22 cada iteración del bucle crea una variable nueva para evitar bugs por compartición accidental.
    • Los bucles "for" ahora pueden hacer range sobre enteros.

Herramientas

Comando Go

  • Se puede usar el directorio vendor en un workspace para gestionar dependencias.
  • go get ya no es compatible en el modo heredado GOPATH, que no usa módulos.
  • go mod init ya no intenta importar requisitos de módulos desde archivos de configuración de otras herramientas de vendoring.
  • go test -cover ahora imprime un resumen de cobertura para paquetes que no tienen sus propios archivos de prueba.

Trace

  • La UI web de la herramienta trace fue rediseñada parcialmente para soportar el nuevo tracer.

Vet

  • Cambió el comportamiento de la herramienta vet para las variables de bucle.
  • Se agregó una nueva advertencia para llamadas a append que no agregan valores.
  • Se agregó una nueva advertencia sobre problemas al usar time.Since en una sentencia defer.
  • Se agregó una nueva advertencia cuando no coinciden los pares clave-valor en llamadas a log/slog.

Runtime

  • El rendimiento de CPU mejora entre 1% y 3% al mantener los metadatos del garbage collector basados en tipos más cerca de los objetos del heap.

Compilador

  • Las compilaciones con Profile-Guided Optimization (PGO) ahora pueden devirtualizar más llamadas que antes.

Linker

  • Se cambió el comportamiento de las flags -s y -w del linker para que funcionen de forma más consistente en todas las plataformas.

Bootstrap

  • Go 1.22 requiere para el bootstrap la versión final de parche de Go 1.20 o una posterior.

Librería principal

Nuevo paquete math/rand/v2

  • math/rand/v2 es el primer paquete “v2” de la librería estándar y tiene varios cambios importantes comparado con math/rand.

Nuevo paquete go/version

  • Se agregó el nuevo paquete go/version, que implementa funciones para validar y comparar cadenas de versión de Go.

Patrones de enrutamiento mejorados

  • El routing HTTP de la librería estándar se mejoró para ser más expresivo.

Cambios menores en la librería

  • Hay cambios menores y mejoras de rendimiento en varias librerías.

Ports

Darwin

  • En macOS, en la arquitectura x86 de 64 bits (darwin/amd64), la toolchain de Go ahora genera por defecto ejecutables con posición independiente (PIE).

Arm

  • Se puede usar la variable de entorno GOARM para elegir entre punto flotante por software o por hardware.

Loong64

  • El port loong64 ahora pasa argumentos y resultados de funciones usando registros.

OpenBSD

  • Se agregó un port experimental para PowerPC big-endian de 64 bits (openbsd/ppc64) en OpenBSD.

Opinión de GN⁺

  • En este lanzamiento de Go 1.22 destacan especialmente los cambios en los bucles "for" y la introducción del nuevo paquete math/rand/v2. Estos cambios ofrecen mejor rendimiento y estabilidad para los desarrolladores de Go, y las nuevas funciones reflejan la evolución del lenguaje Go.
  • El paquete math/rand/v2 ofrece una mejor generación de números aleatorios mediante algoritmos más rápidos y una nueva API, lo que representa una mejora importante para criptografía y otras aplicaciones que dependen de la aleatoriedad.
  • Se espera que Go 1.22 tenga un impacto positivo en la comunidad Go al ofrecer varias optimizaciones y nuevas funciones que mejoran el rendimiento y la experiencia del desarrollador sin perder compatibilidad.

1 comentarios

 
GN⁺ 2024-02-08
Opiniones en Hacker News
  • Un desarrollador de TypeScript compartió su experiencia reciente al cambiarse al lenguaje Go. Al principio expresó preocupación por la falta de funciones para arreglos en Go y por un sistema de tipos poco flexible. Sin embargo, al usar Go sintió las ventajas de su excelente biblioteca estándar, la seguridad de tipos y los estándares de codificación integrados. También valoró positivamente que el enrutamiento se haya integrado en la biblioteca estándar.
  • Compartió un enlace con notas de lanzamiento interactivas para la versión Go 1.22.
  • Un desarrollador que ha usado Go durante más de 9 años comparó Dart (para desarrollo con Flutter) con Go. Mientras Dart intenta agregar todas las funciones posibles, Go busca la simplicidad. En Dart, las distintas formas de inicializar clases pueden volverse confusas, y extraña la simplicidad de Go. Las expresiones únicas complejas con mapas/streams, etc. en Dart pueden causar confusión al depurar o para desarrolladores principiantes.
  • io.Copy ahora puede usar la llamada al sistema splice(2) de Linux al copiar de TCPConn a UnixConn. Valora mucho las ventajas que se pueden obtener en el paquete io mediante este tipo de patrones.
  • En la versión Go 1.22 se mejoraron los patrones de enrutamiento, pero esto puede provocar pequeños problemas de compatibilidad. Esto se puede controlar mediante el campo httpmuxgo121.
  • A cierto desarrollador no le gusta la funcionalidad de “alcance de función” agregada al lenguaje Go. Considera que no ofrece suficiente comodidad frente a la complejidad añadida al lenguaje, y que no encaja con el estilo explícito y simple de Go.
  • Compartió un enlace de discusión sobre que cada iteración de un bucle genere una nueva variable en la versión Go 1.22.
  • Da la bienvenida a la incorporación de sql.Null[T]. Antes usaba null de sqlboiler, que tiene una API similar a sql.Null, pero además incluye un método IsSet() bool que indica si el valor fue establecido explícitamente.
  • Celebra que se haya agregado enrutamiento a la biblioteca estándar y está considerando si podrá eliminar la biblioteca chi.
  • Entre los desarrolladores que usan Go en producción, surge la pregunta de si conviene migrar rápidamente a una nueva versión o quedarse en lanzamientos más antiguos por más tiempo. También compartieron opiniones sobre el uso de la palabra clave any.