Go 1.20 llega con el soporte experimental de PGO, mejoras y mas

Goland

Go es un lenguaje de programación concurrente y compilado con tipado estático inspirado en la sintaxis de C

Se dio a conocer el lanzamiento de la nueva versión del lenguaje de programación Go 1.20, que está siendo desarrollado por Google con la participación de la comunidad como una solución híbrida que combina el alto rendimiento de los lenguajes compilados.

La nueva edición de Go 1.20 se benefició de una fase de desarrollo extendida, posible gracias a las amplias pruebas anteriores y la estabilidad general mejorada de la base de código.

Cabe mencionar que el proyecto se desarrolla inicialmente con la vista puesta en la programación multiproceso y el funcionamiento eficiente en sistemas multinúcleo, incluida la provisión de medios implementados a nivel de operador para organizar la computación paralela y la interacción entre métodos ejecutados en paralelo. El lenguaje también brinda protección integrada contra desbordamientos de bloques de memoria asignados y brinda la capacidad de usar el recolector de elementos no utilizados.

La sintaxis de Go se basa en los elementos familiares del lenguaje C con algunos préstamos del lenguaje Oberon. El lenguaje es bastante conciso, pero el código es fácil de leer y entender.

Principales novedades de Go 1.20

En esta nueva versión que se presenta de Go 1.20 se destaca que se ha proporcionado soporte experimental para la optimización guiada por perfiles (PGO), que tiene en cuenta las características determinadas en el tiempo de ejecución. Teniendo en cuenta el perfil de ejecución durante el montaje se puede mejorar el rendimiento de las aplicaciones en un 3-4%. Se agregó la opción «-pgo» para incluir PGO en go build, go install y otros comandos de compilación.

Otra de las novedades que se presenta, es que se agregaron funciones SliceData, String y StringData al paquete unsafe para manipulaciones de bajo nivel con segmentos (matrices de tamaño dinámico) y cadenas (por ejemplo, para convertir un área de memoria apuntada por un puntero a una cadena de tipo cadena y viceversa).

Ademas de ello, tambien se destaca que cover, se ha ampliado con la capacidad de recopilar perfiles para los programas en general y no solo para las pruebas unitarias, tambien se agregó la opción «-cover» para ir a compilar, instalar y otros comandos de compilación para generar un perfil de cobertura.

La utilidad go se libera de la vinculación a paquetes de biblioteca estándar precompilados ubicados en el directorio $GOROOT/pkg, lo que hizo posible excluirlos de la distribución y lograr una reducción en el tamaño de los datos descargados. Los paquetes de biblioteca estándar, como los paquetes regulares, ahora se crean según sea necesario y se almacenan en caché en el caché de compilación.

El comando go deshabilita el uso del paquete cgo de forma predeterminada en sistemas sin un conjunto de herramientas para compilar código C. Estos sistemas ahora usan variantes de los paquetes de biblioteca estándar en el lenguaje Go, en lugar de usar paquetes precompilados.

De los demás cambios que se destacan de la nueva versión:

  • La utilidad vet tiene advertencias adicionales sobre problemas con variables utilizadas en bucles que se detectan cuando las pruebas se ejecutan en paralelo.
  • Las reglas de conversión de tipos se amplían con la posibilidad de conversión directa de un segmento a una matriz.
  • La especificación define explícitamente el orden en que se comparan los elementos de matriz y los campos de estructura.
  • El paquete crypto/ecdh se ha agregado a la biblioteca estándar con soporte para el intercambio de claves ECDH (Elliptic Curve Diffie-Hellmann).
  • Se agregó un nuevo tipo http.ResponseController para crear controladores de respuesta HTTP enriquecidos.
  • Se ha agregado la función Rewrite al tipo httputil.ReverseProxy para modificar la solicitud.
  • Se agregó la función context.WithCancelCause , que le permite cancelar la llamada con un error específico.
  • Los campos Cancelar y WaitDelay se agregaron al tipo os/exec.Cmd para especificar el comportamiento cuando se cancela el contexto o finaliza el proceso.
  • En el compilador y recolector de basura se ha reducido el consumo de memoria y se ha optimizado el rendimiento (el aumento de velocidad alcanza el 2%).
  • Se ha trabajado para acelerar la compilación: una reducción en el tiempo de compilación puede llegar al 10 %.
  • Se agregó soporte experimental para la plataforma FreeBSD en sistemas con arquitectura RISC-V (GOOS=freebsd, GOARCH=riscv64).

Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.