El equipo de GO dio a conocer el anuncio del lanzamiento de Go 1.14, una nueva versión del lenguaje de programación de código abierto desarrollado por Google. Como se prometió, este lanzamiento no excedió el mes de febrero y Go Team no dejó de agradecer a todos aquellos que tuvieron la amabilidad de contribuir al diseño de esta versión, ya sea a través de comentarios provistos para este propósito y también para quienes participaron en la prueba beta o emitiendo códigos, reportando errores y enviando comentarios.

Hasta ahora, GO Team se ha esforzado por mantener el desafío lanzado por Rob Pike, uno de los tres creadores de Golang, que quería que este lenguaje facilitara y acelerara la programación a gran escala. Ya que la sintaxis de Go se basa en elementos familiares del lenguaje C con préstamos individuales del lenguaje Python. El lenguaje es lo suficientemente conciso, pero el código es fácil de leer y comprender.

El código Go se compila en archivos ejecutables binarios separados que se ejecutan de forma nativa sin usar una máquina virtual (los perfiles, los módulos de depuración y otros subsistemas de detección de problemas se integran en tiempo de ejecución como componentes del runtime), lo que permite un rendimiento comparable a los programas de C.

El proyecto se desarrolló inicialmente teniendo en cuenta la programación multiproceso y el trabajo eficiente en sistemas de múltiples núcleos, incluso proporcionando medios implementados a nivel del operador para organizar la computación paralela y la interacción entre métodos paralelos.

El lenguaje también proporciona protección integrada contra áreas de desbordamiento de bloques de memoria asignados y brinda la capacidad de usar el recolector de basura.

Principales novedades de Go 1.14

Un cambio principal en esta nueva versión se refiere al nuevo sistema de módulos en el comando go para su uso generalizado, está habilitado de forma predeterminada y se recomienda para la gestión de dependencias en lugar de GOPATH.

El nuevo sistema de módulos presenta compatibilidad con versiones integradas, herramientas de entrega de paquetes y un sistema mejorado de administración de dependencias. Con la ayuda de módulos, los desarrolladores ya no están vinculados a trabajar dentro del árbol GOPATH, pueden definir explícitamente dependencias basadas en versiones y crear ensamblajes repetibles.

Además, los subprocesos ya no tendrán que bloquearse indefinidamente, como es el caso anteriormente con un bucle sin llamar a una función, ya que Go Scheduler funciona para verificar un cierto tiempo de posible ejecución de la rutina actual durante las llamadas a funciones antes de quitarla del hilo para abrir el espacio y permitir la ejecución de nuevas rutinas. Esto tendrá un impacto en términos de menor latencia en Go 1.14.

Otro de los cambios es el soporte agregado para incrustar interfaces con un conjunto de métodos superpuestos. Los métodos de la interfaz integrada ahora pueden tener los mismos nombres y las mismas firmas que los métodos en las interfaces ya existentes. Los métodos declarados explícitamente siguen siendo únicos como antes.

Por otra parte se ha aumentado el rendimiento de la expresión «defer», cuyo uso ahora casi no difiere en velocidad de una llamada directa a una función diferida, lo que permite utilizar el inicio diferido de una función en código sensible al rendimiento.

También se proporciona una preferencia preventiva asincrónica: los bucles que no contienen llamadas a funciones ahora pueden conducir a un punto muerto para el planificador o un retraso en el inicio de la recolección de basura.

Se ha mejorado la eficiencia del sistema de asignación de páginas de memoria, que ahora tiene significativamente menos conflictos de bloqueo en configuraciones con grandes valores de GOMAXPROCS.

Como resultado, las demoras se redujeron y el rendimiento aumentó con la distribución paralela intensiva de grandes bloques de memoria.

Sin más podrán encontrar una lista más completa de estas nuevas características clave en las notas de la versión GO 1.14.

Además, esta nueva versión funcionará en macOS 10.11 El Capitan y aún admitirá binarios de 32 bits en esta plataforma. Esta puede ser la última versión que también admite binarios de 32 bits en otras plataformas como watchOS, iOS, iPadOS y tvOS.