El lenguaje Go de Google, también conocido como Golang, fue elegido recientemente como el lenguaje de programación de Tiobe de 2016, basándose en el rápido crecimiento de su popularidad a lo largo del año, más del doble que los segundos clasificados, Dart y Perl. El índice de lenguajes de Tiobe se basa en el «número de ingenieros cualificados en todo el mundo, cursos y proveedores de terceros», utilizando los resultados de múltiples motores de búsqueda.
Ese gran crecimiento de la popularidad conlleva un mayor interés en las herramientas de desarrollo para el lenguaje de programación. Dado que el lenguaje Go se distribuye en forma de código abierto completo con compiladores, herramientas y bibliotecas, lo que les queda a los programadores es encontrar por sí mismos entornos de edición compatibles con Go, ya sean editores directos o entornos de desarrollo integrados (IDE), alojados localmente o en la nube.
Para este artículo he tratado de examinar todos los entornos de edición disponibles compatibles con Go y centrarme en los que parecen merecer la pena. Empecé con la lista oficial de IDEs y plugins para Go y reduje los aproximadamente 35 elementos de la lista a los que podrían merecer una prueba. Comenzaré con un rápido resumen de los productos útiles que encontré en cada categoría y terminaré con una mirada cercana a mis principales selecciones.
Note que el desarrollo del lenguaje Go normalmente depende de la variable GOPATH establecida en la raíz de su espacio de trabajo de desarrollo Go. Eso puede ser un problema para las aplicaciones GUI como los editores, que no siempre respetan la configuración del entorno.
Hay más de una docena de herramientas de lenguaje Go que se pueden instalar en directorios bajo la carpeta GOPATH con el comando go get
, una vez que el propio Go está instalado. Muchos de los editores que he evaluado utilizan una o más de estas herramientas.
Go IDEs
Hay un sorprendente número de IDEs que soportan Go. Sin embargo, el significado de «soporte» varía. Cuatro IDEs se destacaron para mí: Gogland, Eclipse con goclipse, LiteIDE, y Komodo IDE.
En el extremo superior, Gogland de JetBrains cuenta con terminaciones inteligentes, inspecciones y correcciones rápidas, refactorización simple, navegación rápida, ventanas emergentes rápidas, algo de generación de código muy básico, detección de llamadas recursivas, ventanas emergentes de tipo de expresión, resaltado de punto de salida, búsqueda de uso, formato de código, resaltado semántico, y sugerencias de parámetros en su editor. Sí, es mucha funcionalidad para editar un lenguaje joven. Otras características de Gogland incluyen un depurador integrado, análisis de cobertura, ejecución de pruebas, un menú para ejecutar herramientas Go, y algunas funcionalidades no específicas de Go que son similares a las que encontrarás en otros productos JetBrains, como IntelliJ IDEA. Gogland puede gestionar múltiples configuraciones GOPATH, en lugar de depender exclusivamente del entorno GOPATH del sistema.
Gogland está actualmente disponible de forma gratuita como un producto de acceso temprano. Es probable que tenga un precio similar al de otros productos de JetBrains. Se espera que esté disponible por suscripción anual, ya sea por sí mismo o en un paquete con el resto de las herramientas de JetBrains, con descuentos para los académicos y los contribuyentes de código abierto.
En un nivel ligeramente inferior de complejidad, Eclipse con goclipse proporciona resaltado de sintaxis, sangría automática y contorno en su editor, todo en el espíritu de otros módulos de lenguaje de Eclipse como Java. Las integraciones incluyen la depuración con GDB, la búsqueda de definiciones con las herramientas guru y godef Go, y el autocompletado con la herramienta gocode. Eclipse y el plugin de goclipse son gratuitos y de código abierto.
LiteIDE cuenta con un navegador de paquetes, vista y esquema de clases, navegador de documentos, navegación de código, búsqueda de usos y refactorización de código en su editor. Las integraciones incluyen soporte de gocode, índice de la API GOPATH, depuración con GDB, y un playground de Go. LiteIDE es gratuito y de código abierto.
Komodo IDE soporta la comprobación de la sintaxis de Go (linting) y el resaltado, la coloración de la sintaxis, el plegado de código y otras características que mejoran la productividad. Komodo también es compatible con la inteligencia de código Go con terminaciones, consejos de llamadas, esquemas y definiciones de paso. La refactorización incluye el renombramiento de variables y miembros de clase y la extracción de métodos. Komodo soporta pruebas unitarias de Go, colaboración de código, control de versiones, shells interactivos y perfilado de código. El mayor reclamo de Komodo es que soporta todos los principales lenguajes de código abierto, incluyendo Python, Node.js, Ruby, Go, Perl y Tcl.
Komodo IDE es un producto comercial. Komodo Editor, que tiene un subconjunto de las capacidades del IDE, es gratuito.
Ir a los editores
Aunque un IDE puede proporcionar toda la funcionalidad que desea para desarrollar código, los IDEs a menudo pueden sentirse «pesados». En otras palabras, pueden tardar mucho en arrancar, utilizar mucha memoria y, a veces, sentir que no responden mientras escribes código porque están haciendo demasiadas cosas en segundo plano. Los editores de código a veces pueden ser preferibles, especialmente para sesiones cortas, siempre y cuando no te moleste tener que cambiar a una ventana de shell de línea de comandos separada para la compilación.
Los plugins a veces pueden añadir características similares a las del IDE a los editores de código. Eso suele ser bueno, siempre y cuando la sobrecarga periódica de mantener los plugins actualizados y la sobrecarga constante de los plugins ejecutando procesos en segundo plano no ralenticen su edición.
Atom, Brackets y Visual Studio Code son los tres editores que se destacaron para mí para trabajar en el lenguaje Go. Todos son gratuitos y de código abierto. Sin embargo, BBEdit, Emacs, Notepad++, Sublime Text, TextMate y Vim se integran con plugins para el lenguaje Go, y todos tienen sus defensores. Emacs, Notepad++ y Vim son gratuitos y de código abierto. BBEdit es comercial, pero su hermano pequeño TextWrangler es gratuito.
El editor Atom de GitHub viene con el paquete language-go, que soporta la gramática y los fragmentos de Go. Los paquetes adicionales para Go aportan más funcionalidad. Por ejemplo, go-plus se integra con muchas herramientas estándar de Go (para el autocompletado, el formato, el linting, las pruebas) para proporcionar un entorno similar al IDE, y go-debug se integra con el depurador delve.
El editor Brackets de Adobe tiene varias extensiones de la comunidad para el soporte de Go. Estas incluyen Go-IDE, que utiliza gocode
para el autocompletado; Go-Syntax, que utiliza CodeMirror para el resaltado de sintaxis; y Improved Go Formatter, que utiliza gofmt
para formatear el código y goimports
para gestionar las importaciones.
Visual Studio Code soporta el resaltado de sintaxis de Go desde el principio. El plugin vscode-go, que se integra con más de una docena de herramientas Go estándar, proporciona características adicionales. Si no tiene su GOPATH configurado, el plugin le pedirá que lo configure tan pronto como intente editar un archivo de lenguaje Go; puede configurarlo para el proyecto y/o el entorno del sistema. Si no tienes las herramientas Go instaladas, el plugin te pedirá que las instales en los lugares estándar determinados por tu GOPATH.
Ideas Go basadas en la nube
Las IDEs basadas en la nube son una innovación relativamente reciente en el espacio de desarrollo de software. Tienen dos ventajas inherentes: No requieren ninguna configuración local aparte de un navegador compatible, y pueden permitir la edición por parte de múltiples desarrolladores si están diseñados para ello. El inconveniente es que los IDE basados en la nube suelen sufrir retrasos, lo que puede volver locos a los desarrolladores e interferir en el «flujo» que permite a los programadores ser más productivos. Tres IDEs basados en la nube soportan actualmente el lenguaje Go: Cloud9, CodeEnv, y Wide.
Cloud9 es un IDE basado en la nube multilingüe que soporta Go fuera de la caja. Se conecta con los repositorios de GitHub, Bitbucket y Google Cloud Platform, y tiene espacios de trabajo que puedes compartir y clonar. Además de un editor de código con un amplio conjunto de características y un sistema de archivos en línea, tiene MySQL y otras bases de datos, ventanas de terminal e inmediatas, y enlaces de teclado personalizables, con los modos Vim, Emacs y Sublime Text suministrados de serie. El autocompletado y la depuración para Go son todavía experimentales, pero el resaltado de sintaxis, el panel de ejecución, la vista de esquema y el linting son totalmente compatibles.
CodeEnv es también un IDE multilingüe basado en la nube. Hay una imagen de entorno base Go para entornos privados, así como una imagen de entorno Go pública. Cada entorno consiste en un sistema de archivos, un sencillo editor de código con resaltado de sintaxis y una ventana de terminal. Actualmente hay ocho opciones de imagen base y seis opciones de imagen de entorno.
Wide es un IDE basado en la web para equipos que está escrito en y para el lenguaje de programación Go. Utiliza un editor de programación temático basado en CodeMirror con resaltado de sintaxis asistido por gocode, autocompletado, formato de código y colaboración en tiempo real. Wide cita a LiteIDE como una dependencia.
Gogland
JetBrains Gogland, actualmente en un estado de vista previa temprana, parece ser el IDE de Go más completo disponible, aunque todavía no ha sido lanzado comercialmente. Su depurador integrado, el análisis de cobertura y la ejecución de pruebas son elementos que lo distinguen de los editores corrientes que tienen unas pocas integraciones de herramientas.
En la captura de pantalla de abajo, en la que utilizo Gogland para examinar parte del código fuente del proyecto de lenguaje Go, se pueden ver varias características de edición de Gogland, incluyendo el árbol del proyecto, una pista de inspección (la bombilla), el resaltado del punto de salida y la navegación rápida utilizando la barra de navegación de la derecha (la caja de código con los números de línea fuera de orden). Para más capturas de pantalla que muestren lo que puede hacer Gogland, te remito a la guía de características de JetBrains.
Gogland utiliza el mismo ecosistema de plugins de JetBrains que IntelliJ IDEA y WebStorm, y ya incluye muchas características relevantes heredadas de esos productos. Por ejemplo, puedes utilizar Gogland para trabajar con HTML y con lenguajes y frameworks de front-end, exactamente igual que WebStorm. Gogland también te permite trabajar con bases de datos SQL, como IntelliJ IDEA y DataGrip. Si necesitas combinar el soporte de Node.js con tu código Go o necesitas soporte de Subversion además de la integración con Git, es una cuestión rápida de añadir los plugins.
Visual Studio Code
Visual Studio Code con el plugin vscode-go es un buen editor de Go que funciona bien y tiene una buena integración con Git. Visual Studio Code necesita actualizaciones y un reinicio al menos mensualmente, pero rara vez se siente lento durante la edición. In the screenshot below we see the explorer on the left, Go tools installation at the bottom right, and code editing at the top right.
The Go tools enable the vscode-go plugin, which supplies many editing and code checking features. These include completion lists (using gocode
), signature help (using gogetdoc
or godef
plus godoc
), snippets, quick info (using gogetdoc
or godef
plus godoc
), go to definition (using gogetdoc
or godef
plus godoc
), find references (using guru
), file outline (using go-outline
), workspace symbol search (using go-symbols
), rename (using gorename
), build-on-save (usando go build
y go test
), lint-on-save (usando golint
o gometalinter
), dar formato (usando goreturns
o goimports
o gofmt
), generar esqueleto de pruebas unitarias (usando gotests
), añadir importaciones (usando gopkgs
), y depurar parcialmente (usando delve
).
Eso es un montón de funcionalidad útil, aunque no tanto como la que se obtiene en el IDE de Gogland. El screencast en el archivo readme de vscode-go hace un buen trabajo para demostrar cómo funcionan la mayoría de las características.
Cloud9
De los tres IDEs en la nube que soportan Go, el más interesante actualmente parece ser Cloud9. Tiene el editor de programación más funcional de los tres y soporta unos 17 lenguajes además de Go. Aunque su completamiento de código en el lenguaje Go está marcado como experimental, encontré que funcionaba bastante bien y no causaba muchos retrasos en la escritura.
El editor Ace de Cloud9 actualmente soporta el resaltado de sintaxis para más de 100 lenguajes de programación. El número 17 de arriba es para los lenguajes que también tienen otro soporte, como ejecutar el código, linting, outlining, code completion y debugging.
Los espacios de trabajo de Cloud9 actualmente ejecutan Ubuntu 14.04 y Go 1.7.3. Puedes actualizar tu instalación de Go desde el intérprete de comandos Bash (ver la parte inferior de la captura de pantalla), así como ejecutar tu Go y otros programas desde Bash.
Como hemos visto, tienes muchas opciones posibles de entorno de programación para el desarrollo de Go. Mientras que yo elegí Gogland como el mejor IDE de Go con todas las funciones, Visual Studio Code con vscode-go como el mejor editor de Go, y Cloud9 como el mejor IDE de Go en la nube para mí, hay más de 30 otras posibilidades. Dado lo personal que puede ser la elección de los entornos de desarrollo de software, deberías probar unos cuantos y ver cuál se ajusta mejor a tus necesidades y preferencias.