Golang: el lenguaje de programación de Google

Que el nombre “Google” va más allá de un simple buscador es sabido desde hace tiempo. Su catálogo de productos abarca servicios web como Google Maps, plataformas de entretenimiento como YouTube o Google Music, aplicaciones de comunicación como Gmail, soluciones ofimáticas como Google Docs y hardware con el smartphone Pixel de la casa. No contenta con esto, la compañía suministra desde hace algunos años herramientas de software para la satisfacción de programadores y desarrolladores web. Desde 2012, el cada vez más popular lenguaje de programación Go, ampliamente conocido como Golang (Go Programming Language), tiene también un lugar en el extenso porfolio de la empresa de Silicon Valley.

¿Qué es Golang?

En septiembre de 2007, tres programadores de la plantilla de Google, Robert Griesemer, Rob Pike y Ken Thompson, presentaron sus ideas para un lenguaje de programación optimizado y más sencillo, sentando así las bases de Go. Lo que comenzó siendo un proyecto modesto se convirtió pronto en un ambicioso propósito cuyo desarrollo se vio impulsado por Google, que dispuso todos los recursos necesarios para ello. Desde que se publicara oficialmente como proyecto open source con licencia BSD a finales de 2011, a Go no le ha sido difícil rodearse de una amplia comunidad que hasta el día de hoy no ha dejado de colaborar activamente en su continuo desarrollo y en su optimización. La primera versión estable (1.0) se publicó el 28 de marzo de 2012 y desde la versión 1.1 (un año después) Google publica actualizaciones cada medio año.

Hecho

Tanto el logo como la mascota de Golang –una taltuza, roedor de la familia de los geómidos propio de grandes regiones de América– son obra del diseñador Renée French, autor también de Glenda, la liebre de Plan 9. Rob Pike y Ken Thompson estuvieron implicados en el desarrollo del sistema operativo Unix en los Bell Labs a lo largo de los años 1980.

La sintaxis de Golang tiene muchas semejanzas con la sintaxis básica de los lenguajes de la familia C, pero muestra una fuerte influencia de los lenguajes Pascal, Modula y Oberon, desarrollados por Niklaus Wirth. También revela aspectos de lenguajes como Newsqueak y Limbo, que a su vez se inspiran en CSP (Communicating Sequential Processes), de Tony Hoares. Golang es un lenguaje compilado, si bien desde el principio se da gran importancia a una elevada velocidad de traducción. El lenguaje también cuenta con un recolector de basura automático (Gargabe Collection o GC), que contribuye a gestionar con eficiencia la memoria disponible y reduce así los problemas de espacio.

Qué hace tan especial a Golang

A pesar de que Golang, en comparación con otros lenguajes, aún es relativamente joven, es tan maduro y estable al mismo tiempo, que desarrolladores de todo el mundo –incluso Google– ya han sucumbido a sus posibilidades. Sus principales virtudes son la simplicidad y la multifuncionalidad, aspectos que han perseguido sus autores desde el principio. La principal motivación que ha guiado su desarrollo tiene que ver precisamente con la insatisfacción resultante de la oferta disponible en el momento, compuesta por lenguajes que destacaban por ser muy eficientes al compilar código, por ejecutarlo rápidamente o por programarse fácilmente, pero nunca por las tres ventajas a la vez.

Al combinar lo mejor de cada familia, Golang se adelanta al resto constituyendo un buen modelo a seguir. El lenguaje desarrollado por Google aúna la facilidad de la programación de los lenguajes interpretados y dinámicos y la eficiencia y la seguridad de un lenguaje compilado de tipado estático (statically typed). A esto se añade que la estructura de Go obedece a la finalidad de acortar el proceso de desarrollo de modo que también permita crear en un solo ordenador grandes archivos ejecutables en poco tiempo. Algunas de las características distintivas con las cuales puede alcanzarse este nivel de calidad son las siguientes:

  • Un sistema de tipos ligero pero expresivo que permite clasificar y diferenciar objetos (variables, funciones, etc.)
  • Concurrencia (cálculos simultáneos), que permite una ejecución más rápida de los programas
  • El mencionado recolector de basura para usar racionalmente la memoria y evitar problemas de espacio
  • Una estricta especificación de dependencias sin una sintaxis de declaraciones compleja
  • Multiplataforma, para usar las aplicaciones desarrolladas en cualquier sistema

Programar con Golang: ¿es tan fácil como dicen?

La sintaxis de Go tiene mucho en común con la clásica sintaxis de C, si bien se diferencia de este lenguaje, desarrollado ya en 1972, por una serie de pequeñas mejoras y un menor volumen. Entre estos cambios cabe mencionar que al programar con Go ya no son necesarios los paréntesis de las condiciones y los bucles, y el punto y coma de cierre típico de los lenguajes C es opcional. Asimismo, Go permite regular la validez de los identificadores (para variables, funciones, etc.) por medio de la escritura (mayúscula o minúscula): si un identificador ha de permanecer activo fuera de un paquete Go, solo hay que escribir la inicial en mayúscula.

A continuación se enumeran otras peculiaridades de la programación con Golang:

  • Variable de entorno GOPATH como base: uno de los primeros pasos obligatorios al programar con Golang consiste en crear el directorio GOPATH junto con los tres subdirectorios “src” (archivos fuente de Go), “pkg” (objetos paquete de Go o package objects) y “bin” (comandos ejecutables). Es en este espacio, que puede localizarse libremente, donde se gestiona el código obligatorio con sus dependencias.
     
  • Desarrollo modular con paquetes GOLANG: los archivos fuente se organizan en directorios que se identifican como paquetes (packages). El nombre del directorio es idéntico al del paquete al cual pertenecen los archivos fuente contenidos en este directorio. Si hay funciones o tipos que deben usarse más allá de su paquete se emplea la mayúscula.
     
  • Formato de código uniforme y predefinido: Golang prescribe ciertas convenciones para el formato del código, como es, por ejemplo, el espacio exacto entre los elementos. Esto hace que, una vez se ha aprendido a programar aplicaciones con Golang, sea muy fácil leer el código de otros desarrolladores sin tener que descifrar su estilo personal, como ocurre con otros lenguajes. Con todo, no es necesario prestar atención excesiva a todos los detalles, puesto que la herramienta integrada gofmt optimiza el código escrito automáticamente, corrigiendo eventuales errores de formato.
     
  • Relative imports por defecto: todos los archivos y paquetes que se importan a proyectos Golang (propios o ajenos) son siempre relativos al directorio GOPATH/src, lo que simplifica el proceso de importación. Además, Go no compila los elementos que importa si no se utilizan. Esto garantiza que el código se mantenga limpio en caso de que los elementos importados no se usen o hayan dejado de hacerlo.
     
  • Valores de devolución múltiples para funciones y métodos: con Go se pueden crear funciones y métodos capaces de devolver varios valores diferentes. De esta forma, Go puede devolver claramente separados un resultado válido y un error especificado de forma alternativa. En C, en cambio, los errores de escritura se muestran con un valor numérico negativo, mientras que el código de error se guarda aparte.

Ventajas y aplicación de Golang

Ya se han mencionado muchos de los principales puntos fuertes de Golang. Gracias a su simplicidad, el lenguaje de Google ofrece a los programadores mucha más comodidad que otros lenguajes. Una vez asumida la teoría básica, es fácil sacar provecho de su facilidad de uso y de los numerosos mecanismos automatizados que resultan en un considerable ahorro de tiempo. Con estas herramientas, entre ellas la mencionada optimización autónoma del código con gofmt, Go aporta la respuesta idónea a las tareas cada vez más exigentes del desarrollador de software. A esto se suma el hecho de que el código de Golang siempre tiene el mismo formato, lo que facilita en gran medida su legibilidad y con ello, sobre todo, el trabajo en equipo.

Otro aspecto destacable de la programación con Golang es su buen rendimiento. La velocidad de ejecución de las aplicaciones Go saca buena nota si se compara con otros lenguajes compiladores. Su velocidad de compilación encuentra parangón a grandes rasgos con la de Java, por ejemplo, pero, mientras muchas aplicaciones Java se basan en el framework Spring y esto hace que al iniciarse necesiten cierto tiempo hasta poder responder peticiones HTTP, los servicios Golang tardan menos en iniciarse porque utilizan las implementaciones disponibles de la biblioteca estándar.

En consecuencia, no es de extrañar que hasta ahora Golang haya encontrado sobre todo aplicación en empresas y en el entorno de los servidores, ámbitos en donde la estabilidad y el rendimiento de los servicios juegan un rol especialmente importante. Es sobre todo en la virtualización basada en contenedores donde hay especial demanda de este joven lenguaje de programación, lo que también guarda relación con que Docker, el representante más prominente de las plataformas de contenedores, esté basado en Go.

La otra cara de Go Programming Language: ¿en qué le superan otros lenguajes?

Con toda la alabanza que se merece este moderno lenguaje, también es conveniente poner algunas de sus debilidades de relieve. Estas se deben principalmente a su simplicidad, que aunque por un lado representa su mayor ventaja, por el otro contribuye a la falta de algunas facetas que muchos programadores aprecian mucho en otros lenguajes.

La más relevante es probablemente la ausencia de tipos genéricos (tipos de datos que permiten indicar parámetros tipo individuales) en la biblioteca estándar. Los defensores de la programación con tipos y aquellos acostumbrados al uso de Generics en Java han buscado en vano una cualidad similar en Go hasta ahora, si bien el equipo de Go no excluye la implementación de tipos genéricos en una versión futura. Muchos programadores también tendrían que acostumbrarse a no usar clases, herencias y constructores. Una característica de Go no siempre deseada es la ocultación automática de archivos importados no activos. Otros lenguajes tienen la ventaja de extraer los componentes en cuestión de los comentarios de modo que permanezcan en el código a pesar de su inactividad.

Por último, otra desventaja de Golang frente a robustos veteranos como C, C++, etc., reside en su historia relativamente corta. Esto hace que disponga de un arsenal mucho más pequeño de paquetes implementados por defecto y preparados para su importación. Además, el número de manuales disponible en la red para Go es aún menor que el que puede encontrarse para los lenguajes más consolidados.

Resumen de las ventajas y desventajas de Golang

Ventajas Desventajas
Multiplataforma No soporta tipos genéricos
Sintaxis muy simplificada Orientado a objetos (solo parcialmente)
Gestión automática de la memoria (recolector de basura) Soporte ampliable de IDE (entornos integrados de ejecución)
Formato de código unitario Oferta limitada de bibliotecas y paquetes externos
Importacion más sencilla Cambiar de lenguajes clásicos orientados a objetos como Java o C++ requiere esfuerzo
Admite diferentes valores de devolución para funciones y métodos Hasta ahora pocos manuales y expertos
Corrección de código automatizada (gofmt)  
Concurrencia  
Extensa biblioteca estándar, sobre todo para HTTP y tareas de red  

Conclusión: ¿a quién le conviene aprender a trabajar con Golang?

Una vez analizados los fundamentos y las peculiaridades de este lenguaje de programación libre, surge de forma lógica una pregunta: ¿quién debería hacer el esfuerzo de aprender a escribir con Golang? Como es natural, no es posible dar una respuesta universal, puesto que Go no se ha desarrollado con el fin de sustituir a todos los lenguajes conocidos, sino con el de erigirse como alternativa. Gracias a su eficacia y a su extraordinario rendimiento, aspectos que se reflejan también en las aplicaciones que se programan con él, Go es una interesante opción especialmente en los ámbitos de los negocios y los servidores. Cuanto más código deba escribirse y compilarse, más claras son sus ventajas.

Para los aprendices en programación el proceso de aprendizaje resulta bastante más fácil, sacando provecho de la sencillez de este lenguaje, la cual puede al mismo tiempo ser frustrante para los más experimentados debido a sus similitudes con C o Java. Pero si se superan las molestias ligadas al cambio de uno a otro, también los “viejos” programadores podrían ser capaces de apreciar sus virtudes. Como el mercado de expertos en Go aún no es muy amplio, conocer el lenguaje de Google no deja de representar una gran oportunidad tanto laboral, a la hora de presentarse a un puesto como programador, como privada, de cara a desarrollar una idea propia.