En mi trabajo han creado una arquitectura de microservicios implementados en Golang que ha removido diversos cuellos de botella de la arquitectura monolítica implementada en PHP. Así que decidí comenzar a dedicarle tiempo para aprenderlo.
El IDE que uso es goland de jetbrains, usando Material como tema. Cada carpetica le puso un icono personalizado y es que he estado organizando el código para que se parezca a un framework de php como laravel. Para trabajar también se puede emplear VSCode, de hecho en un principio trabajé en él y me fue muy bien (también hay un tema Material para VSCode).
Actualmente estoy empleando los siguientes paquetes:
Para manejar request usé echo. Va más allá de manejar las peticiones POST, GET, etc, también mejoras para el uso de templates, trae middlewares para manejo de CORS, JWT, y mucho más. Facilita mucho la vida en este lenguaje estrictamente tipificado a la hora de devolver respuestas en json, por ejemplo.
Para tener un archivo .env para las configuraciones godotenv. Este es un paquete portado del proyecto dotenv de ruby on rails.
El Orm que uso es gorm y permite correr migraciones. Ni en sueños le llega a Eloquent, (Eloquent es la cosa mas maravillosa que hay), pero trae muchas herramientas para no estar escribiendo sql crudo.
Para alguien que ha usado laravel, que lo trae todo de una vez es como que muy rudimentario hacerse una app web golang. Pero creo que a la vez libera al proyecto de componentes que uno no va a usar. Lo otro es que golang no es orientado a objetos, entonces hay que apañarselas con las interfaces y los structs. Tengo un par de cosas con los paquetes que hice que debo resolver, pero la aplicación funciona.
Comenzar a aprender Golang
Para empezar Golang aplicado al mundo Web yo les recomiendo como primera medida... Aprender Laravel. Uno puede aprenderse las funciones, las estructuras de control y todo de un lenguaje. Sin embargo queda algo muy vital que se pocos explican: cómo organizar tu código. Laravel te enseña a estructurar y responsabilizar tu código, no es sólo modelo, vista y controlador, está la interacción con la base de datos, llevar el mínimo de código al archivo principal del proyecto, aprender la forma más idónea de organizar las rutas url del proyecto.
Dicho esto cito unos recursos que me sirvieron mucho para empezar a aprender el lenguaje:
Adquirí en amazon el libro Introducing Go: Build Reliable, Scalable Programs de Caleb Doxsey, fue el primero que usé y me pareció genial. Es Básico, no vas a poder hacer una aplicación web, es más para aprender los fundamentos de golang y nada más. No hace falta comprarlo, Puedes visitar este sitio web que trae contenido muy similar al del libro que mencioné.
Luego de eso adquirí este curso en Udemy Go: The Complete Developer's Guide (Golang) de Stephen Grider. Me sirvió para aprender algunos conceptos visualmente. Me gustó porque Stephen explica pausadamente, los videos son grabados claramente, te explica cómo proceder a configurar el entorno de desarrollo en Visual Studio Code (VSCode) y tienes un certificado que te permite presumir 🤗
Otra cosa interesante que aprenderás con Stephen es a moverte por la documentación de Golang, que es un poco tediosa. Afortunadamente la de los paquetes como Echo y Gorm es mas amigable.
Un recurso gratuito, con muchos ejemplos aplicados que vale la pena revisar lo ofrece Jon Calhoun en gophercises. Allí aprendí a realizar un CRUD básico, y vi una impementación bien interesante de la joya de la corona de Golang: programación concurrente.
A la hora de comenzar con Echo, @alexyslozada en su canal de youtube tiene un playlist de un curso para comenzar con echo. También tiene un video en directo que sobre JWT, un poco largo, pero que merece la pena revisar.
¿Por Qué usar Golang en el web?
Para verle el lado positivo a golang opino que uno debe venir de otro lenguaje y evaluar. Yo vengo de PHP y me gusta por tres razones principales.
1.- Como vengo de PHP y javascript, programar en un lenguaje estrictamente tipificado te da confianza.
2.- La programación concurrente agiliza te permite ejecutar scripts de una forma que no podía hacer en PHP.
3.- El lenguaje permite formatear el código solito, eso permite más legibilidad y homogeneidad en el código que algunas veces se pierde cuando programas una solución con varios desarrolladores.