Go (lenguaje de programación)

Go es un lenguaje de programación compilado y tipado estáticamente diseñado en Google por Robert Griesemer, Rob Pike y Ken Thompson. Go es sintácticamente similar a C, pero con seguridad de memoria, recolección de basura, tipificación estructural y simultaneidad al estilo CSP. El idioma a menudo se conoce como Golang debido a su nombre de dominio, golang.org, pero el nombre correcto es Go. Hay dos implementaciones principales: La cadena de herramientas del compilador autohospedado de Google se dirige a múltiples sistemas operativos y WebAssembly. gccgo, un frontend de GCC. Un compilador de fuente a fuente de terceros, GopherJS, compila Go to JavaScript para el desarrollo web de front-end.

Historia

Go fue diseñado en Google en 2007 para mejorar la productividad de la programación en una era de máquinas multinúcleo, en red y grandes bases de código. Los diseñadores querían abordar las críticas de otros lenguajes en uso en Google, pero mantienen sus características útiles: tipado estático y eficiencia en tiempo de ejecución (como C), legibilidad y usabilidad (como Python o JavaScript), redes de alto rendimiento y multiprocesamiento. Los diseñadores estaban motivados principalmente por su aversión compartida por C ++. Go se anunció públicamente en noviembre de 2009, y la versión 1.0 se lanzó en marzo de 2012. Go se usa ampliamente en producción en Google y en muchas otras organizaciones y proyectos de código abierto. En noviembre de 2016, los diseñadores tipográficos Charles Bigelow y Kris Holmes lanzaron las fuentes Go y Go Mono específicamente para el proyecto Go. Go es un sans-serif humanista que se parece a Lucida Grande y Go Mono es monoespaciado. Cada una de las fuentes se adhiere al conjunto de caracteres WGL4 y fue diseñada para ser legible con una gran altura xy formas de letras distintas. Tanto Go como Go Mono se adhieren al estándar DIN 1450 al tener un cero recortado, una l minúscula con una cola y una I mayúscula con serifas. En abril de 2018, el logotipo original fue reemplazado por un GO estilizado inclinado a la derecha con líneas aerodinámicas finales. Sin embargo, la mascota de Gopher siguió siendo la misma. En agosto de 2018, los principales colaboradores de Go publicaron dos "diseños preliminares" para nuevas funciones de lenguaje, genéricos y manejo de errores, y pidieron a los usuarios de Go que enviaran comentarios sobre ellos. La falta de soporte para la programación genérica y la verbosidad del manejo de errores en Go 1.x habían generado críticas considerables.

Historial de versiones

Go 1 garantiza la compatibilidad para la especificación del idioma y las principales partes de la biblioteca estándar. Todas las versiones hasta la versión actual de Go 1.16 han mantenido esta promesa. Cada versión principal de Go es compatible hasta que haya dos versiones principales más recientes.

Diseño

Go está influenciado por C, pero con énfasis en una mayor simplicidad y seguridad. El idioma consta de: Una sintaxis y un entorno que adoptan patrones más comunes en los lenguajes dinámicos: declaración de variable concisa opcional e inicialización mediante inferencia de tipo (x: 0 en lugar de int x 0; o var x 0;) Recopilación rápida. Gestión remota de paquetes (go get) y documentación de paquetes en línea. Enfoques distintivos para problemas particulares: Primitivas de concurrencia integradas: procesos livianos (goroutines), canales y la declaración de selección. Un sistema de interfaz en lugar de herencia virtual e incrustación de tipos en lugar de herencia no virtual. Una cadena de herramientas que, de forma predeterminada, produce binarios nativos vinculados estáticamente sin dependencias externas. El deseo de mantener la especificación del lenguaje lo suficientemente simple como para mantenerla en la cabeza de un programador, en parte omitiendo características que son comunes en lenguajes similares.

Sintaxis

La sintaxis de Go incluye cambios de C destinados a mantener el código conciso y legible. Se introdujo un operador combinado de declaración / inicialización que permite al programador escribir i: 3 o s: "¡Hola, mundo!", Sin especificar los tipos de variables utilizadas. Esto contrasta con int i 3 de C; y const char * s "¡Hola, mundo!" ;. Los puntos y comas todavía terminan declaraciones, pero están implícitos cuando se produce el final de una línea. Los métodos pueden devolver varios valores y devolver un resultado, el par de errores es la forma convencional en que un método en