• 08/09/2024 2:46 AM

¿Por qué aprender Go?

porJesus Flores

Feb 9, 2021

¿Qué es Go?

Go es un lenguaje de programación de código abierto diseñado por Google y en la actualidad apoyado por los desarrolladores de la comunidad de código abierto, también nos brinda la facilidad de ser altamente eficiente pero al mismo tiempo fácil de usar, dotándonos de la capacidad de contar con seguridad de la memoria, recolector de basura, organización estructural y su punto fuerte, el manejo de concurrencia.

¿Qué hace diferente y bueno a Go por sobre otros lenguajes?, empecemos por citar los aspectos más destacados del lenguaje como lo son:
 Velocidad, a pesar de ser un lenguaje de alto nivel tiene un rendimiento realmente potente.
 Recolección de Basura, lenguajes que por lo regular son veloces no cuentan con recolecto de basura.
 Objetos más simples, es un lenguaje orientado a objetos aunque no lo pareciera, sin embargo la implementación es más sencilla que los objetos en otros lenguajes como C++.

Una característica más que me parece importante citar acerca de Go, es su implementación de concurrencia, vale la pena decir concurrencia eficiente integrada que proporciona a los developers la posibilidad de escribir tareas que se realicen en múltiples procesadores y/o en distintos hilos.
Comencemos por hablar un poco de los lenguajes en general y las diferencias entre ellos. Existen tres extensas categorías de los lenguajes para computadoras. El primero es el lenguaje máquina, el siguiente el lenguaje ensamblador, y por último el lenguaje de alto nivel, este último en nuestra actualidad es una categoría demasiado extensa.
El lenguaje máquina es el de más bajo nivel y su ejecución ocurre directamente en el CPU, es decir en el procesador. Las instrucciones son simples, sumar, multiplicar, colocar valores en el registro de contenidos, recuperar el resultado y moverlo a otro registro.

El siguiente es el lenguaje ensamblador, podemos definir de una manera muy básica al lenguaje ensamblador como un mapeo del lenguaje máquina, supongamos que contamos con una instrucción en lenguaje maquina 11110000 que podría ser una suma, entonces en ensamblador usamos la palabra ADD. En otras palabras podemos decir que el ensamblador es un equivalente al lenguaje máquina pero en inglés, donde puede ser leído y corregido por los developers. Si usted desea escribir un código que sea realmente rápido y realmente eficiente entonces podría usar el lenguaje ensamblador, sin embargo la complejidad sigue siendo realmente extenuante, dando paso así a los lenguajes de alto nivel.

Por último tenemos a los lenguajes de alto nivel, son los que comúnmente utilizamos para programar en nuestros días, dado que son más fáciles de utilizar que el lenguaje máquina y ensamblador, en el hecho de contar con implementaciones que los lenguajes anteriores no nos proporcionan, por ejemplo las variables, el lenguaje ensamblado y máquina no cuentan con variables, otro ejemplo es el uso de condicionantes y bucles que si bien si existen en los lenguajes anteriores son difíciles de implementar y su uso varía entre los diferentes ensambladores.

GO Lang es un lenguaje de alto nivel, por lo tanto el código que escribimos en Go es traducido a lenguaje máquina para que el procesador sea capaz de entenderlo y ejecutar las instrucciones. Supongamos que estamos trabajando con un procesador i7, i7 (o cualquier procesador) no entiende C, Java, Python, Go, C++, por citar algunos, el lenguaje que entiende el procesador es el lenguaje máquina.

Sin importar el lenguaje de alto nivel que utilicemos, tiene que ser forzosamente traducido, para lo cual existen dos caminos, mediante una compilación o una interpretación.
En los lenguajes compilados la traducción a lenguaje maquina la realiza el compilador antes de ejecutar e implementar el código escrito. ¿Y cómo sucede esto?, el developer escribe el código fuente, lo compila y posteriormente lo ejecuta, donde lo que se ejecuta es el código compilado, lo cual básicamente es un código en lenguaje máquina. El punto de los lenguajes compilados es que la traducción ocurre en una única ocasión previamente a ejecutar el código, por lo cual cuando el código está siendo ejecutado lo que en realidad sucede es que se están ejecutando directamente instrucciones en lenguaje máquina.

Por el otro lado tenemos a los lenguajes interpretados, a diferencia de los lenguajes compilados las instrucciones se traducen mientras se ejecuta el código, ¿en que afecta? , lo que sucede con los lenguajes interpretados es que agrega tiempo a la ejecución puesto que debe realizar la traducción a lenguaje máquina instrucción por instrucción, por lo cual debe realizar dos tareas, primero realizar la traducción a lenguaje máquina y después ejecutar realmente la intención de la instrucción.

El código compilado es generalmente más rápido de ejecutar, al no tener necesidad de realizar la traducción cada vez que se ejecuta una instrucción, por otro lado los lenguajes interpretados facilitan la codificación , al contar con un intérprete, el intérprete por sí mismo puede manejar cosas que como developers es posible ahorrarse, como por ejemplo declarar los tipos de variables, basta con solo comenzar a utilizar una variable, y el intérprete por sí mismo es capaz de intuir con qué tipo de dato está usted trabajando. Por otra parte el intérprete es el encargado de la gestión de la memoria, es capaz de administrar la memoria, de tal manera que se deshace de las variables y otros objetos cuando ya no se encuentran en uso. Como bien sabemos cuándo usamos una variable estas se guardan en algún lugar de la memoria, y entre más variables utilicemos más memoria ocupamos, por lo cual eventualmente es posible quedarse sin memoria.

Los lenguajes interpretados son capaces de liberar automáticamente de la memoria los objetos que ya no se encuentran en uso, GO nos brinda las bondades de los compiladores y de los intérpretes, es un lenguaje compilado con características de un lenguaje interpretado, en específico la recolección de basura, podemos entender como a la recolección de basura como administración automática de la memoria.

Si alguna vez ha trabajado con C, sabe que el proceso de desasignar debe ser cuidadoso, puesto que si desasigna la memoria pronto, podría ocurrir un acceso a memoria falsa, si usted todavía necesita la variable, y usa la memoria que ya está desasignada, puede aparecer un error. También puede darse la situación de pérdida de memoria, en la cual se tenga cada vez más memoria que no está siendo utilizada, pero que se encuentra en bloqueo por que la maquina cree que si se está utilizando. Go proporciona la capacidad de compilar la recolección de basura cuando se compila el código como si fuera un intérprete, lo cual convierte a go en un lenguaje compilado con recolección de basura, siendo el único inconveniente que se ralentiza un poco la ejecución, sin embargo es un recolector altamente eficiente, pero tenemos la ventaja de contar con una recolección automática de basura.

por Jesus Flores

Ingeniero de Software y Agile Coach

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *