Go
Un lenguaje deliberadamente pequeño, diseñado alrededor de cómo fallan de verdad los equipos grandes.
- Primera versión
- 2009 (1.0 in 2012)
- Creado por
- Robert Griesemer, Rob Pike and Ken Thompson, at Google
- Tipado
- Estático, fuerte y con interfaces de tipado estructural
- Extensiones de archivo
- .go
Para qué sirve
Docker, Kubernetes, Terraform y Prometheus están todos escritos en Go. Ese es más o menos todo el argumento de venta: infraestructura de red que tiene que construirse rápido, distribuirse como un solo archivo y ser entendida por quien la herede.
Lo que hace que Go sea Go es lo que quedó fuera. Sin herencia. Sin excepciones. Sin sobrecarga de operadores y, durante los primeros trece años, sin genéricos. El razonamiento fue organizacional, no estético. Un lenguaje con menos formas de decir algo produce código que se lee igual sin importar quién lo escribió, y gofmt zanja la discusión sobre el formato antes de que alguien pueda empezarla. A quienes aman los lenguajes expresivos, Go suele parecerles tedioso. A quienes mantienen el servicio de alguien más, suele parecerles un alivio.
Dos cosas hacen casi toda la venta. La compilación es tan rápida que se siente interactiva, y lo que sale es un solo binario estático sin runtime que instalar. Luego las goroutines y los canales hacen la concurrencia tan barata que la usas sin pensarlo. Esa última parte es la razón por la que se adueñó de la sala de servidores.
De dónde viene
Go nació en Google en 2007, de la frustración con C++ a gran escala: compilaciones lentas, dependencias enredadas, un lenguaje que nadie podía tener entero en la cabeza. Griesemer, Pike y Thompson lo anunciaron en noviembre de 2009. Los dos últimos venían de Bell Labs, con Unix y Plan 9 a sus espaldas.
Go 1.0 salió en 2012 con una promesa de compatibilidad que en buena medida se ha cumplido: el código escrito contra Go 1 todavía compila. Suena aburrido, y lo es, y también es una parte sustancial de por qué las empresas de infraestructura lo adoptaron. La gestión de dependencias tardó más en asentarse. GOPATH cedió el paso a los módulos en 2018 tras varios arranques en falso.
Los genéricos aterrizaron en Go 1.18 en 2022, tras más de una década de propuestas rechazadas por agregar complejidad que no se pagaba sola. El resultado es contenido y el estilo alrededor apenas se ha movido. Los diseñadores parecen satisfechos con eso.
Cómo se siente teclearlo
Go se teclea rápido y premia la precisión por encima de la velocidad. Nombres cortos, sin puntos y comas, las tabulaciones de gofmt. Pero la convención de manejo de errores implica que vas a escribir if err != nil { return err } más veces que cualquier otra línea en tu vida, y := es una secuencia de dos teclas que tus dedos deberían aprender como un solo movimiento.
128 pasos en 6 tours, desde lo básico hasta programas completos.
Los tours
- Fundamentos del lenguajeGo es tan pequeño que treinta pasos de verdad cubren el lenguaje. 30 pasos.
- ConcurrenciaLa razón por la que la gente elige Go. 25 pasos.
- ErroresGo devuelve los errores como valores y el compilador no te deja olvidar ninguno. 15 pasos.
- Interfaces y genéricosStructs y métodos, después interfaces, que Go satisface de forma implícita. 19 pasos.
- Biblioteca estándar y estructura del proyectoLa biblioteca estándar de Go es inusualmente completa, y este tour es un recorrido práctico por ella. 26 pasos.
- PruebasLas pruebas vienen en la toolchain, no en una biblioteca que eliges. 13 pasos.
Documentación oficial
- La documentación de Go
- La especificación del lenguaje
- Effective Go
- Referencia de la biblioteca estándar
- El blog de Go