Con aproximadamente una década de edad, el lenguaje de programación de Google; Go o Golang(como también se denomina), se postula como uno de los lenguajes más actuales para la contrucción de backends. Su principal atractivo es la simplicidad de su sintaxis junto con su velocidad, rendimiento y su caracter concurrente, basado en CSP,  que le dota de la posibilidad de usar infinidad de conexiones simultáneas 

Se trata de un lenguaje compilado que aglutina características de lenguajes consolidados pero aportando novedades que le hacen marcar la diferencia.

Desde el punto de vista sintáctico está claramente basado en C ,incluyendo el uso de punteros de memoría, aunque con mejoras significativas ,que solucionan problemáticas de su antecesor, como es la inferencia implicta para la declaración de variables, resolviendo por lo tanto la problemática de C con sus complejas declaraciones de variables.

En este ejemplo podemos comprobar como la variable i no se aumenta mediante la función Aumentar pero si lo hace mediante Aumentarpuntero , que actúa directamente sobre la información almacenada en la memoria ,vemos también como la dirección de memoria permanece invariante 

Otra de sus características y que lo asemeja a lenguajes como python o javaScript es la tipificación dinámica, que en el caso de Go amplía el concepto con la novedosa particularidad de permitir la implementación automática de una interfaz en un struct.

Merece una mención especial las Go-routinas, un modo de comunicación asincrono y concurrente basado en canales fundamentados en CSP. Se trata de un concepto completamente novedoso y que no tiene nada que ver con los pThreads o los procesos al uso.

Observando la consola de ejecución del ejemplo previo podemos apreciar como a diferencia de las rutinas las go-rutinas se ejecutan asíncrona y concurrentemente.

Como hemos comentado previamente, los canales son la base de la concurrencia permitiendo conectar de manera concurrente go-rutinas entre sí. Se definen mediante la palabra reservada «make» y transmiten valores a través de un canal mediante la expresión «<-«. el constructor make admite un segundo parámetro que consiste en el número posible de buffers que pueden usarse por el canal

 

En Go no todo son ventajas y de hecho tiene una serie de carencias significativas que deberán de ir solucionando en las proximas versiones.

Cabe destacar su particular orientación a objetos. Es un enfoque limitado que permite la implementación de interfaces y la creación de objetos pero en el que no es posible la herencia. 

Otros aspectos a tener en cuenta son la no existencia de genéricos,  la no posibilidad de sobrecarga de métodos y la falta de infraestructura para la gestión de excepciones.

En cuanto a la gestión de las dependencias o más bien sus versiones tiene un mecanismo poco robusto donde la carga de un paquete consiste en la inclusión de una distribución desde un repositorio, como github, con el riesgo de que cualquier modificación  no compatiblemente puede provocar que la aplicación Go ,que incluye la dependencia, deje de funcionar correctamente.

En un próximo artículo veremos en detalle una aplicación backend Go, con gorilla-mux y mongo.

Enlaces de interes

Documentación

  • https://golang.org/doc/

IDE’s online

  • repl.it 
  • https://www.jdoodle.com/execute-go-online
Esta web utiliza cookies propias para su correcto funcionamiento. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad