intive Argentina Blog

¡Go, Go, Go!: Golang

A pesar de haber sido lanzado oficialmente en el año 2011, ha sido durante estos últimos años que, Golang, el lenguaje de programación desarrollado por Google, ha causado más furor que nunca. Se trata de un lenguaje moderno, pensado para adaptarse a la capacidad y velocidad de internet actual; es decir, optimizado para lograr que miles de usuarios puedan ejecutar al mismo tiempo un programa.

La disponibilidad de Go como proyecto open source y, por supuesto, el peso de quienes son sus creadores, ha garantizado el apoyo y soporte de la comunidad de software. En especial, de la generación nueva de programadores que comprenden que, Go proviene de la sintaxis básica de uno de los lenguajes más estables y respetados (C) pero, al mismo tiempo, es más simplificado.

Entre sus semejanzas con C, se destaca que Go es un lenguaje compilado y que, también puede producir archivos ejecutables en otros sistemas operativos como Windows, Linux y Mac desde el mismo código fuente. Además, es estáticamente tipado. Sin embargo, entre sus diferencias puede notarse como, en Go, los paréntesis no son indispensables para las condiciones y los bucles, así como el punto y coma para cerrar termina siendo opcional.

Como Java, el lenguaje cuenta con un garbage collector automático que contribuye a gestionar los problemas de espacio disponible y memoria.

Puntos claves de Golang

Veamos a continuación, los aspectos que podemos destacar de Go.

  • Su paradigma es imperativo, no orientado a objetos. No obstante, contiene features para hacer programación funcional, aunque los expertos no recomiendan usarlo para estos fines.
  • Entre sus convenciones: para indicar si las funciones o métodos son públicos o privados, se escriben en mayúscula o minúscula. Si la primera letra va en mayúscula, significa que ese campo es público. De lo contrario, va a indicar que es privado.
  • Las funciones pueden devolver más de un valor normalmente y, el resultado de la operación y un error, si lo hubiese. Para ignorar alguno de los valores, se lo asigna a un guión bajo (_), también llamado blank identifier.
  • A diferencia de otros lenguajes pero de manera similar a C, Go emplea punteros. Esta característica permite acceder a la dirección donde se almacena una variable. Los punteros se crean por medio de los operadores (*), (&). El asterisco sirve para acceder al valor de la variable y el ampersand (&) para obtener su dirección de memoria. El motivo de su uso es el de acceder a la variable ya sea por valor o por referencia.
  • Para el manejo de errores, en Go se considera que el estado de error es uno de los posibles resultados de una operación. Por lo tanto, es necesario contemplar todos los posibles errores que puedan suceder de forma explícita en cada función. Como consecuencia, se produce un código más verboso.

Un Backend poderoso

Concurrencia

Una de las fortalezas de Go es que soporta concurrencia mediante dos elementos básicos: goroutines y channels.

  • Goroutine

Una goroutine puede ejecutarse simultáneamente a otras goroutines. Podríamos considerarla como un thread liviano, ya que requiere menos memoria y menos código. La manera de crearlas es mediante la sentencia go, adelante de la llamada a una función.

  • Channel

Por otro lado, un channel es un mecanismo de comunicación que permite compartir datos entre goroutines y tiene dos operaciones principales: enviar y recibir, que se representan mediante una flecha (<-).

Existen dos tipos de channels:

  • Unbuffered: pueden almacenar sólo un dato e impiden a las goroutines enviar más datos hasta que otra goroutine reciba el dato almacenado previamente.
  • Buffered: contienen una cola de elementos que funciona como una cola FIFO.

Para evitar los típicos problemas de concurrencia, Go provee distintas soluciones:

  • Bloqueo de recursos compartidos en paquetes como atomic y sync.
  • Exclusión mutua utilizando mutex para crear una sección crítica.
  • Los mencionados channels para mantener las goroutines sincronizadas.

¿Por qué Golang?

Go posee todos los beneficios de lenguajes maduros como C, combinados con las cualidades, optimización y soporte que brinda un lenguaje moderno, como por ejemplo la simplicidad del código. Esto significa que maneja una curva rápida de aprendizaje para aquellos desarrolladores que deseen iniciarse en el lenguaje; en especial, para aquellos que tienen una base sólida en C y deseen migrar a un lenguaje más nuevo.

Los invitamos a dejar sus comentarios y experiencias de uso de Golang. ¿Lo probaron? ¿En qué tipo de proyectos? ¿Qué ventajas y desventajas encuentran en su uso?

Si aún no experimentaron, acá pueden ejecutar su primera línea de código en GO:

https://play.golang.org/

Recomendaciones de algunas bibliografías

  • The Go Programming Language by Alan A. A. Donovan & Brian W. Kernighan
  • Go in Action by William Kennedy with Brian Ketelsen & Erik St. Martin

Ilein González

Ilein González es licenciada en Comunicación Social, mención periodismo, graduada de la Universidad Católica Andrés Bello. Desde mayo del año 2018 se desempeña como Analista de Calidad en intive-FDV, en uno de los proyectos más desafiantes de la compañía. Ilein es además una entusiasta de la innovación y los procesos.

Julia Mendiola

Es desarrolladora de software en intive – FDV desde diciembre de 2015 e integra la Brigada Java. Es Licenciada en Sistemas egresada de la Universidad Nacional del Noroeste de la Provincia de Buenos Aires. En 2014 fue reconocida por el Honorable Concejo Deliberante de Junín -ciudad donde nació- con la mención “Joven Destacado” por participar en el desarrollo de un teclado simple (Android) para personas con discapacidades motrices.

1 comentario

  • Me pareció muy interesante la nota. Aprovecho para hacerles una consulta. Leyendo en Internet veo que a nivel mundial el lenguaje go se va usando cada vez más. Sin embargo en Argentina en sitios como bumeran o universobit prácticamente no hay ninguna búsqueda laboral de este lenguaje. ¿Creen que en algún momento este lenguaje se va a comenzar a usar más en el país? Gracias