Saltar al contenido

¿Qué es Go?

A medida que la tecnología evoluciona, también lo hace el número de nuevos lenguajes de programación. Tendencias como los omnipresentes dispositivos multiprocesadores, la explosión de los dispositivos móviles y la actual revolución de la IO han ayudado a impulsar esta explosión. Pero cualquiera que sea la causa, los desarrolladores viven ahora en un mundo cada vez más fragmentado. Aún así, es nuestro trabajo mantenernos al día con los últimos cambios, y eso incluye uno de los nuevos lenguajes en el bloque, conocido como «Go». Echemos un vistazo a lo que hace que este se destaque de sus homólogos, y por qué deberías tomarte el tiempo para aprenderlo.

Go fue iniciado por un pequeño equipo de Google como un intento de manejar con gracia los desafíos que las grandes organizaciones (como Google) enfrentan. Es una respuesta a las crecientes tendencias que buscan reducir la sobrecarga mental que requiere un lenguaje de programación y reducir los tiempos de compilación para soportar los bucles de prueba de construcción de código requeridos por metodologías como el Desarrollo Dirigido por Pruebas (TDD). Go enfatiza la simplicidad y la claridad de su código para que sea más fácil de entender y mantener. Al mismo tiempo, Go incorpora poderosas características que permiten construir aplicaciones muy sofisticadas.

¿Qué hace a Go diferente?

Para empezar, es simple. Como se mencionó, un problema básico que Go trata de resolver es la necesidad de reducir la sobrecarga mental que pone en los desarrolladores. Varios aspectos del lenguaje destacan esto. Estos incluyen:

Vocabulario enfocado

Muchos idiomas tienen numerosas palabras clave que un desarrollador debe recordar. Varias de estas palabras clave están diseñadas para apoyar los conceptos de programación que han existido durante décadas. Con el Go, muchos de estos conceptos han sido condensados al máximo para reducir la cantidad de palabras clave requeridas. Como resultado, Go tiene actualmente alrededor de 25 palabras clave, en comparación con 50 o más para lenguajes como Java y C#.

Reglas simples de alcance

Muchos lenguajes ofrecen a los desarrolladores una gran flexibilidad para asegurar que las variables y funciones puedan ser ocultadas de otras partes de la base de código. Go tiene sólo tres niveles de alcance y convenciones muy simples para determinar el alcance:

  1. Las variables locales (declaradas dentro de una función) se amplían hasta el bloque actual.
  2. Las variables de nivel de paquete se amplían al paquete si empiezan con una letra minúscula.
  3. Las variables de nivel de paquete se analizan públicamente si empiezan con una letra mayúscula.

No hay un ámbito «privado», como era de esperar, lo que es suficiente para incomodar a algunos desarrolladores. Pero en la práctica, esto abre muchas oportunidades.

Recogida de basura incorporada

La recolección de basura es un problema difícil de resolver. Sin embargo, la gestión manual de la memoria a menudo supone un coste bastante elevado para el desarrollador y dificulta la escritura de código sin errores. Es por eso que los desarrolladores de Go hicieron un requisito para tenerlo en el lenguaje. Inicialmente, el recolector de basura podía cobrar un alto precio en una aplicación en términos de rendimiento. Sin embargo, el costo de la recolección de basura está bajando rápidamente gracias a un esfuerzo decidido.

Es poderoso

La ejecución simultánea es un desafío que toda aplicación moderna debe manejar para aprovechar los entornos informáticos de multiprocesadores de hoy en día. Go adoptó el modelo de Proceso Secuencial Comunicativo (CSP) (alias el Modelo del Actor) que ha sido utilizado con éxito por Erlang. Go combina hilos verdes ligeros (llamados goroutines ) con conductos de comunicación llamados canales para formar un modelo de concurrencia simple y poderoso. Esto permite que una aplicación se ejecute con miles de actores, sin la carga de tratar de mantener la memoria compartida libre de corrupción.

Funciones de primera clase

Cuando el lenguaje orientado a los objetos dominaba el panorama del desarrollo de software, la función de menor importancia quedaba en gran medida relegada a ser definida en el contexto de una clase. Con el descubrimiento de que las funciones de primera clase eran una de las partes buenas de JavaScript, muchos lenguajes han trabajado para restaurar las funciones al estado de primera clase. Go absorbió esta lección y permite que las funciones sean creadas y pasadas por la aplicación. Eso no significa que haya abandonado la orientación a objetos, sino que combina los mejores aspectos de la programación funcional y los estilos orientados a objetos para proporcionar una mayor flexibilidad con la menor ceremonia posible.

Baterías incluidas

Para crear aplicaciones modernas, se necesita algo más que un gran lenguaje. Las aplicaciones modernas se basan en pruebas para asegurar su corrección, generadores de documentación para comunicar cómo funciona la aplicación, y linters para asegurar que se cumplen los estándares de codificación. Go abarca cada uno de estos temas como preocupaciones centrales del lenguaje, no como un simple agregado que debe ser tratado por otro equipo. Como resultado, la instalación de las herramientas de desarrollo de Go proporciona un acceso instantáneo a todas estas capacidades y una garantía de que trabajarán juntos sin tener que luchar sólo para que todo funcione.

Inconvenientes de Go

Aunque Go tiene éxito en la mayoría de los frentes en su esfuerzo por ser a la vez poderoso y simple de usar, tiene una cosa en común con todos los demás idiomas: No es perfecto.

Gestión de paquetes

Encontrarás un gestor de paquetes básico incorporado en Go, sin embargo, si estás acostumbrado a trabajar con versiones de primera clase como la de Ruby o la de Node, notarás algunas lagunas. El administrador de paquetes de Go cubre los aspectos básicos, pero no es compatible con cosas como el bloqueo de versiones, que puede ser crítico cuando tu aplicación depende de una versión específica de una biblioteca. La comunidad está trabajando en ello con herramientas como Godep, pero aún no es una preocupación central. Con el lanzamiento de la versión 1.5, el equipo central de Go está comenzando a mejorar la herramienta, pero la solución final aún está lejos.

Depuración

Cuando Go se lanzó por primera vez, usó el depurador GNU (GDB) como su principal fuente de soporte de depuración. Aunque esto funciona en escenarios limitados, el modelo de ejecución de Go es tan diferente de lo que GDB espera que rápidamente se topa con problemas. Una vez más, la comunidad está trabajando en él con proyectos como delve, pero no encontrarás ninguna integración profunda de un depurador en un IDE en este momento.

Para llevar

Aunque todavía está en su fase inicial, hay muchos beneficios en el aprendizaje del Go. Puede que lo odies o te enamores de él, pero casi seguro que te hará pensar de forma diferente sobre la programación. El desarrollo con Go es diferente a otros lenguajes con los que he trabajado; en lugar de utilizar docenas de bibliotecas y aprender cada una de ellas, Go te pide que aprendas sólo unos pocos conceptos y que luego te concentres en aplicar esos conceptos a tu problema.