En pasados artículos hemos estado interactuando con nuestra API, GopherApi, ya hemos desarrollado diferentes endpoints y además hemos incluido los test del mismo.
Nuestra API además es de software libre y cualquier persona puede realizar PRs (Pull Request) sobre ella, con lo cuál necesitamos un sistema que nos verifique que los PRs cumplen con unos estándares puestos por nosotros para asegurarnos que al integrarlos en la rama master no se produzca ningún error.
... ➦
En un pasado artículo os explicábamos como crear una API Rest en Go, pero no llegamos a explicar como poder testear dicha API y, como sabemos, testear nuestra aplicación es muy muy importante si queremos poder hacer refactors sin miedo, u obviamente evitar bugs.
¿Pero y cómo testeo los handlers? Pues primeramente deberas estar familiarizado con la forma de testing en GO, cosa que ya os explicábamos en el artículo Empezando con los test automatizados en Go, recordad que se le llama test automatizado a todo test que ha sido automatizado y no tenemos que realizar a mano, luego dentro encontramos distintos tipos como son los Unitarios o Units que son los que veremos ahora.
... ➦
Entendemos por algoritmo determinista como aquél algoritmo qué, en términos informales, es completamente predictivo si se conocen sus entradas. Cuándo hablamos de pruebas (tests), entendemos que éstas son deterministas sí, dada una implementación concreta, el resultado de la prueba (OK o KO) es siempre el mismo. Lo mismo lo podemos extrapolar a pruebas de carga o estrés.
Seguimos con el jefe del proyecto preguntando por las mejoras de nuestra implementación, pues, a pesar de que vimos como comparar el rendimiento de nuestras implementaciones, aún no hemos sido capaces de encontrar qué es lo que hace qué nuestra implementación sea excesivamente lenta en comparación con la de la competencia.
... ➦
Ya os hemos explicado como crear un command line en Go utilizando los paquetes que nos ofrece Go en el propio lenguaje, sin necesidad de ninguna librería externa.
Pues esta vez crearemos nuestra primera API Rest, exclusivamente con lo que Go nos permite de entrada, bueno veremos que esto no es exactamente cierto, haremos algo de trampa y utilizaremos alguna librería externa, pero ningún framework.
¿Por qué no usamos un framework?
... ➦
Entendemos por benchmarking como el proceso por el cual se obtiene información útil que ayuda a una organización a mejorar sus procesos, con el objetivo de conseguir la máxima eficacia, ayudando a la empresa a moverse desde donde está hacia dónde quiere llegar.
Hoy vamos a suponer que, cada uno de vosotros, ha dejado su actual empleo, y se ha unido a un nuevo proyecto: un integrador de servicios de intercambio de criptomonedas.
... ➦
El tema que vamos a tratar hoy no sólo afecta a GO sino que es un tema que se trata en general en el mundo del software. Y va íntimamente ligado al tema de dependencias que llevamos tratando durante el pasado mes de Enero.
¿Por qué existe el Semantic Versioning? Cuando Go Modules hace su magia y nos baja las dependencias que tiene nuestro proyecto, modifica y añade las líneas necesarias de dichas dependencias al fichero go.
... ➦
Construyendo una herramienta de cliente en GO Seguro que en tu día a día te has encontrado con que utilizas multitud de herramientas de línea de comandos como desarrollador, véase Git o Docker, entre otras. Incluso puede que hayas creado las tuyas propias en algún momento de tu vida.
Pero, ¿cómo se hacen en GO? Por suerte para nosotros, y para variar, GO viene con la solución bajo el brazo, sin tener que recurrir a librerías externas.
... ➦
Empezar a escribir tests automatizados en Go es tan fácil que no requiere de librerías externas, como sí ocurre en otros lenguajes (véase PHPUnit o JUnit). En esta ocasión, el core de Go nos proporciona, tanto los paquetes necesarios (testing) como el binario para la ejecución de los mismos (go test).
Veamos un sencillo ejemplo:
package main import ( "strings" "testing" ) func IsSuperAnimal(animal string) bool { return strings.ToLower(animal) == "gopher" } func TestIsSuperAnimal(t *testing.
... ➦
En un artículo anterior vimos lo sencillo que era empezar a usar Go Modules, pero, ¿y si os digo que es igual de fácil migrar un proyecto a Go Modules desde los anteriores gestores de dependencias? Sí seguro que pensaréis que estoy de coña, así que vamos a verlo.
Buscar un repositorio con Glide o Dep Esto no debería ser muy complicado, de hecho, seguro que a día de hoy muchos de los repositorios de proyectos GO en GitHub utilizan uno de estos gestores de dependencias.
... ➦
Si estás interesado por los contenedores (concretamente por Docker) y estás inmerso en el mundo de Go, entonces es probable que te hayas preguntado cómo puedes dockerizar tu aplicación. Y aquí estamos para explicártelo, a la vez que repasamos algunos conceptos básicos y buenas prácticas de Go.
Por suerte, el proceso de dockerizar una aplicación escrita en Go es muy sencillo, pues, conceptualmente, lo único que tenemos que hacer es compilar nuestra aplicación para generar el binario que irá dentro del contenedor.
... ➦