Go es un lenguaje de código abierto, desarrollado por Google en el 2007, el cual empezó como un experimento de Robert Griesemer, Rob Pike y Ken Thompson. Diseñado básicamente para la programación de sistemas. Es compilado, estático en tipos -en la mejor tradición de C y C++, con recolector de basura, características de seguridad y concurrencia. Ahora se anuncia la versión 1.6, la cual no tiene tantos cambios dramáticos, sino una serie de mejoras incrementales.
Entre sus mejoras, el soporte a HTTP/2 es probablemente una de las más interesantes. HTTP/2 es el siguiente paso de HTTP, el cual ya se usa en Firefox y Chrome, por ejemplo, así como en muchos sitios web. El soporte para HTTP/2 está ya habilitado tanto para servidores como para clientes cuando usan HTTPS en Go 1.6.
Otra área que se ha mejorado es el paquete de templates. Ahora se soporta el cortar espacios (trimming spaces) alrededor del template para producir una salida más limpia, así como la introducción de una acción {{block}} que puede ser usada para crear templates o construir más templates sobre los ya existentes.
Los desarrolladores han añadido una característica que se brinca finalmente el problema de el escribir más de una gorutina que se mapeé al mismo mapa de forma concurrente. Los mapeos en Go son estructuras de datos interconstruidas que asocian valores a un tipo (la llave), con valores de otro tipo (el elemento o valor). Los problemas ocurren si dos rutinas se actualizan en la misma estructura, porque el módulo de runtime tiene que hacer su mejor esfuerzo para detectar el mal uso de los mapas concurrentes. Si el runtime detecta múltiples actualizaciones concurrentes, imprime un diagnóstico y el programa «truena». Se puede correr el programa entonces bajo el detector, el cual identificará qué rutinas están causando el problema. El módulo de runtime también ha cambiado en la manera en cómo termina un programa cuando entra en pánico. Ahora solamente imprime el stack de la gorutina por la que entró en pánico.
Si usted decide usar cgo, se requiere tomar nota de los cambios importantes de las reglas que se usan para compartir apuntadores entre C y Go, de forma que se prevengan problemas con la interacción con C. En las notas se explica a detalle este asunto.
Referencias: