leanmind logo leanmind text logo

Blog

Código Sostenible

Cómo escribir código fácil de mantener mediante valores, principios y técnicas.

Breve introducción al lenguaje Go

Por Yodra López Herrera y Cristian Suárez Vera

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

Go workplace

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

Declarar variables

Go 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

Go 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

Go 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

Go 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

Go 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

Go structs

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

Go 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

Go 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 😊

Publicado el 18/03/2021 por
Yodra image

Yodra López Herrera

https://yodralopez.dev

Cristian image

Cristian Suárez Vera

https://criskrus.com

¿Quieres más? te invitamos a suscribirte a nuestro boletín para avisarte cada vez que recopilemos contenido de calidad que compartir.

Si disfrutas leyendo nuestro blog, ¿imaginas lo divertido que sería trabajar con nosotros? ¿te gustaría?

Impulsamos el crecimiento profesional de tu equipo de developers