Breve introducción al lenguaje Go
18-03-2021
Nuestros compañeros Yodra y Cristian, se están iniciando en el lenguaje Go. Como resultado de su aprendizaje en proceso, nos ofrecieron esta charla introductoria. Este artículo resume algunos de los puntos de la ponencia.
Workplace

El espacio de trabajo DEBE estar dentro del directorio en el que instalaste Go. Carpeta SRC dentro del GoPath.
Declarar variables

Aunque hay muchas maneras de hacerlo, nos hemos centrado en dos. Es recomendable que uses siempre la misma forma de declarar variables. Curiosidad: Los array existen, pero son muy peculiares, teniendo el tamaño fijado. No obstante, hay una especie de array dinámicos llamados slice, cuyo tamaño puede cambiar.
Visibilidad

Los métodos que queremos que sean públicos empezarán en MAYÚSCULA. Si queremos que sean privados (dentro del paquete en el que estés), empezarán en minúscula.
Funciones

func nombre(parámetros de entrada) (tipos de la salida) {cuerpo}
Si no se define el tipo de un parámetro, se utiliza el tipo del último definido. En nuestro ejemplo, solo tipamos la “y”, por lo que ese tipo queda extendido a las variables anteriores a ella. Se pueden devolver cualquier número de resultados.
Imports

Hay varias maneras de hacer los import en Go, no obstante, esta es la que más suele verse. Todo lo que se quiere importar va dentro de los paréntesis. Truco: Cuando tengas que importar paquetes que no usas, pondrás _ (como alias)
Punteros

Funcionan prácticamente igual que en otros lenguajes. Con el uso de punteros, los valores de las variables cambian. En nuestro ejemplo, el valor de i pasa a ser 21 en vez de 42.
Cambio de chip

No existen las clases, no hay herencias, pero existen las interfaces. Se trabaja con structs que vienen a ser nuestras “clases”. Cuando necesitamos que ciertos métodos se relacionen con nuestra “clase”, tenemos que definir dicha relación antes del nombre del método. Fíjate cómo haríamos para obtener el full name de la “clase” persona. En resumen, Type+func vendrían a ser algo así como nuestra “clase”.
Interfaces

Creamos nuestro tipo con un string dentro. Para implementar la interfaz, implementaremos los métodos de esa interfaz. En ningún momento se dice explícitamente que “este tipo implementa esta interfaz”. Esto supone algún que otro problema que explicamos a partir del minuto 14:07.
Errores

No tenemos excepciones. Como ya dijimos, casi todos los métodos suelen devolver dos cosas, lo que queremos que devuelva y un error. Es muy habitual encontrarnos con la siguiente estructura: Hacemos una llamada a un método y comprobamos: si hay error, lo soluciono VS si no hay error, el programa continúa ejecutándose. Normalmente, los errores implementan la interfaz de error con el método error. El seguimiento que hagamos dependerá del comportamiento que precisemos (subirlos de nivel, imprimirlos, etc.). Existen errores que controlamos (interfaz error) y luego están los panic, en los que el programa se rompe ¿Cómo nos recuperamos en estos casos? Existe la palabra reservada “defer” (similar a los finally de las excepciones en java). Es una función que se ejecuta siempre al final del método en cuestión o, si salta un panic, se ejecuta antes de terminar la ejecución del método. Te lo explicamos con un ejemplo a partir del minuto 18:40
Naming conventions
Un apartado que nos genera inquietud ha sido el nombre, o mejor dicho la letra, que se asigna a las variables ¿Es demasiado corto? Desde luego, supone un sobreesfuerzo tener presente todo el tiempo que, por ejemplo, “e” alude a “error” o “p” a “persona”, si así lo hemos decidido.
Vanilla testing
Tú decides el “happy path”, el camino en el que todo va bien y te limitas a ir haciendo comprobaciones para ver que nada falla con los distintos casos. Lo explicamos con un ejemplo a partir del min 25:05, en él creamos una película probando un end-point de película.
Testify testing
Nos facilita la gestión de los errores en los test. Llegamos a la conclusión de que se parece mucho a JavaScript, sobre todo la parte en la que se crea el test. En general, parece que Go es una mezcla de lenguajes… tienes cosas de JS, de Python, de C, etc.
Quedan muchos aspectos en los que profundizar y lo haremos en un segundo vídeo 😊