Tools de desarrollo para Go

Marcela Bonell
TechWo
Published in
4 min readMay 16, 2018

Go es un lenguaje de programación muy potente que está siendo usado principalmente en el desarrollo de sistemas distribuidos. Dado a los principios con los que fue diseñado, Go viene acompañado de una serie de tools que pretenden mejorar la experiencia del desarrollador y la calidad de los programas escritos usando este lenguaje.

En este post mencionare algunas de las tools que uso en mi día a día como desarrolladora basándome en mi experiencia para mejorar la productividad y entregables al programar en Go.

Gopher Artwork by Ashley McNamara

Editores y plugins

Cada vez me he encontrado con más editores + plugins e incluso IDE’s que soportan Go, para el desarrollo no es necesario tener un IDE dado a que el lenguage es muy ligero, pero esto queda al gusto del programador.

Personalmente yo uso el editor Atom con el plugin go-plus, que junto con mi consola hacen el combo ideal para un desarrollo productivo. Otras opciones populares recomendadas por otros programadores son:

Compilación y mas allá…

Si lo que necesitas es solo compilar y correr tu programa, usa go run.

Para generar un binario ejecutable que contenga el empaquetado final de tu programa y sus dependencias, usa go build. Go permite hacer cross-compilation, es decir, puedes generar binarios para las diferentes plataformas soportadas desde tu sistema operativo. Por ejemplo, desde tu Mac podrías correr el comando GOOS=windows go build y con eso generar un binario para Windows desde macOS.

Otra opción disponible es go install, permite que además de compilar el programa y generar el binario, este será instalado dentro de $GOPATH/bin.

Manejo de dependencias

El manejo de dependencias externas es todo un tema controversial en Go, por lo pronto la comunidad ha estado adoptando más el manejo de estas a través del “vendoring” que básicamente es empaquetar todas las dependencias usadas como parte del programa.

La tool recomendada es dep, aun no esta incluida dentro del lenguaje, sigue en fase de experimentación, pero es segura para usar en producción. Esta tool crea el folder /vendor y descarga ahí cada una de las dependencias usadas dentro de tu código. Con un comando puedes tener al día solo las dependencias (y solo las funciones usadas) requeridas, con esto es más fácil empaquetar el programa final sin dejar que los usuarios tengan que instalar algo extra.

Análisis de código

En Go existen diferentes tools para hacer análisis estático de código, es decir detectar malas prácticas, identificar bugs de seguridad o errores comunes que no son detectados por el compilador. El tener estas tools habilitadas como parte del CI/CD de tu proyecto prevendrá muchos errores en producción.

Los plugins para Go incluyen algunos de los linters más populares como: go vet, errcheck, golint, etcétera. Sin embargo para un análisis digno de un código en producción debemos de apoyarnos de tools que abarquen la mayoría de las áreas vulnerables, para eso recomiendo usar gometalinter. Con gometalinter tendrás una simple tool que abarca la mayoría de los linters con un output único y fácil de configurar. Si tu proyecto es open source, Go Report Card es una gran opción para exponer los resultados del análisis en público.

Testing

Escribir pruebas unitarias es una de las mejores prácticas que podemos tener como desarrolladores, estas nos permiten escribir código que asegura la funcionalidad de nuestro sistema en diferentes escenarios y a través del tiempo. Para Go, las implementación de estas pruebas es muy sencillo, solo deben de cumplir las siguientes reglas:

  • Las pruebas se organizan en un archivo diferente cuyo nombre termina con _test.go
  • El nombre de la función inicia con Test
  • La función debe ser de tipo func(t *testing.T)

Para correr nuestras pruebas y/o conocer el porcentaje de código cubierto por las mismas, tenemos a go test.

  • go test -v
  • go test -cover ./…

Tools para leer codigo…

En Go, el documentar es muy sencillo, no existe una serie de reglas complejas o formatos a seguir como en Java con javadoc, en Go solo es texto plano. Con la tool go doc [item] puedes ver la documentación disponible para ese elemento (función, constante, etc) y con godoc puedes generar la documentación completa de tu paquetes donde se describe cómo tu código funciona, esta puede ser generada en formato web offline, o si tu proyecto es público, entonces podría estar disponible en https://godoc.org/

Por último recomiendo que veas el video de Francesc, un gran developer advocate que explica más a detalle el uso de estas tools, video que me sirvió de inspiración para este post.

Go Tooling in Action por Francesc Campoy

--

--

Marcela Bonell
TechWo
Editor for

Software engineer passionate about open source and their communities.