Desplegar en Heroku una App en Go

¡Volvemos a la carga! Esta vez con un post un poco más técnico que los últimos. Hace tiempo que llevo dandole vuelta a como mejorar la manera en la que desplegamos el software, sobre todo desde que vi la charla de “Deliveritis Aguda de Carlos Buenosvinos.

Así que me he puesto manos a la obra analizando como desplegamos nosotros y como automatizar al máximo posible el deploy. Después de ver distintas opciones la que más sencilla me ha parecido para proyectos personales es Heroku.

Crear cuenta en Heroku

Lo primero es crear una cuenta en Heroku. Tiene una capa gratuita que es suficiente para hacer pruebas.

01 cuenta heroku

Una vez que tengamos la cuenta lista, tenemos que instalar en nuestro ordenador Heroku CLI, en mi caso he optado por la instalación de brew

Continúa leyendo “Desplegar en Heroku una App en Go”

go y json

Vamos a seguir aprendiendo un poco más acerca de GO.
En la serie de posts hemos creado una aplicación para ver la puntuación de un jugador y para añadir un punto dado un jugador.
Es la hora de empezar con aprender JSON.
Para ello ampliaremos la API con un nuevo endpoint que nos devuelva la lista de jugadores y sus puntos en formato JSON.

5519473590_20a555fdf9_z.jpg

Añadir el endpoint:

  • GET /league que devuelve la lista de jugadores con sus puntos

Continúa leyendo “go y json”

Hacer test de integración a una API en Go

Ha llegado la hora de usar nuestra API hecha en Go. Tenemos la API llena de tests unitarios gracias a TDD, además con las responsabilidades separadas usando inyección de dependencias.
Partiendo de la aplicación de los post anteriores en este vamos a crear un punto de entrada main.go y usaremos test de integración para comprobar que todo funcione.

La API que estamos desarrollando sirve para guardar el numero de partidas ganadas por un jugador.
Tenemos 2 endpoints:

  • GET /player/{name} obtiene la puntuación de un jugador dado su nombre.
  • POST /player/{name} añade un punto al jugador.

De momento, lo que nos importa es seguir el flujo de TDD (test – código – refactor) mientras aprendemos GO. Así que no tenemos base de datos, sino que lo guardamos todo en memoria.

Continúa leyendo “Hacer test de integración a una API en Go”

Crear una API con TDD en GO parte 2

En el anterior post ya creamos una pequeña API en GO aplicando TDD. En ese caso se trataba solo de leer datos con peticiones GET.
Basándonos en esa parte y ya que tenemos el gusanillo de TDD(hacer un test, el código y refactorizar) vamos a implementar una petición POST, que nos servirá para guardar datos.
Si recordamos, la idea de la API es ir guardando el numero de partidas ganadas por una serie de jugadores y poder consultar el numero de partidas ganadas por jugador.
Básicamente tendremos:

  • Obtener la puntuación de un jugador GET /player/{name} ya implementado en el post anterior.
  • Añadir una nueva partida ganada a un jugador POST /player/{name}

Como siempre mantendremos nuestro ciclo de TDD: Red, Green, Refactor. Para ello trabajaremos haciendo una solución iterativa y añadiendo mejoras en cada ciclo de TDD.

30627718347_e5af269af4_z
SanchezM LittleFinland GoldButte2

Continúa leyendo “Crear una API con TDD en GO parte 2”

Crear una API con TDD en GO

En este post vamos a crear una pequeña API en GO aplicando TDD como en toda la serie de post.
Ya tenemos el gusanillo de TDD: hacer un test, el código y refactorizar. Así que vamos a seguir con esa filosofía.

La idea de la API es ir guardando el numero de partidas ganadas por una serie de jugadores y poder consultar el numero de partidas ganadas por jugador.
Básicamente tendremos: Continúa leyendo “Crear una API con TDD en GO”

Tdd con go: punteros, errores y el típico ejemplo de wallet

Ya hemos aprendido a usar structs para modelar figuras. Ahora vamos a ir un poco más allá usaremos struct para administrar el estado.
Vamos a realizar el típico ejemplo de una cuenta de banco. ¡El mundo fintec es nuestro!

Vamos a hacer una cartera en al que podremos depositar fondos. Como siempre en toda esta serie implementaremos nuestra cartera haciendo TDD.

Continúa leyendo “Tdd con go: punteros, errores y el típico ejemplo de wallet”

Go con TDD: Visibilidad y naming

Continuamos con la serie de aprendiendo Go Con TDD.
Esta vez el post va a ser un poco especial. Vamos a hablar de visibilidad de los métodos y de por qué Go es especial en ese sentido.
Además comprobaremos que tener buenos tests y saber utilizar un buen IDE nos permiten hacer cambios en nuestro software de manera sencilla.

Si recordamos solo en el primer post de la serio 1. “Aprendiendo Go con TDD” hemos escrito código ejecutable que no fuesen tests. En otras palabras, no hemos hecho ninguna función main todavía.

Continúa leyendo “Go con TDD: Visibilidad y naming”

A fondo con go: structs, interfaces

Si es cierto, en el post anterior ya hablamos de structs, pero es que todavía nos queda mucho por aprender.
Ya sabemos que los structs son colecciones tipadas de campos y además son muy útiles para agrupar datos juntos.
Así que partiendo del ejemplo anterior de geometría, donde tenemos un struct Triangle con un método para calcular su área
y un struct Rectangle con un método para calcular su área vamos a darle una vuelta de tuerca para saber que son las interfaces y como sacarles partido.

9713407427_90f5f069a8_z
Estación de Chamberí – Antonio Tajuelo

Continúa leyendo “A fondo con go: structs, interfaces”

Poco a poco con Go y TDD: package, funciones, bucles, arrays y cobertura de test

Todo funcionando, $GOPATH, HelloWorld,… ahora vamos a hincar el diente de verdad a Go con TDD.
Crearemos una pequeña calculadora con la que aprenderemos a hacer un package, funciones, tocaremos un poco los arrays y además nos servirá para mejorar nuestras skills de TDD.

Empezando por los test

Para empezar con la calculadora, vamos a crear un package llamado calculator, así que creamos un directorio con ese mismo nombre (calculator) y nuestro primer fichero será calculator_test.go (TDD a tope).

*nota: solo puede existir un package por directorio

El código de ese primer test será algo así:

package calculator

import "testing"

func TestAdder(t *testing.T) {
    sum := Add(2, 2)
    expected := 4

    if sum != expected {
        t.Errorf("expected '%d' but got '%d'", expected, sum)
    }
}

Si nos hemos fijado un poco en el mensaje de error, vemos que ahora utilizamos %d en lugar de %s porque lo que queremos es imprimir por consola un número.

Si ejecutamos go test nos aparecerá que no esta definida la función Add

$ go test
# github.com/jeslopcru/golang-examples/02-calculator
./calculator_test.go:8:9: undefined: Add

Compilation finished with exit code 2
7997258366_7e77afa99d_z
Atardecer – Paula Gonzalez Perez

Continúa leyendo “Poco a poco con Go y TDD: package, funciones, bucles, arrays y cobertura de test”