¿Has escuchado hablar de Go, este nuevo lenguaje de programación cuya mascota es un adorable Gopher? No, pues no te preocupes, en esta ocasión me gustaría contarte sobre Go y el por qué deberías darle una oportunidad de estar en tu stack de tecnologico, te adelanto, vale mucho la pena. 😎 Bien, una vez dicho esto, no perdamos más el tiempo y comencemos. 🐿
La mascota de Go es un Gopher.
¿GO O GOLANG?
Go es un lenguaje de programación concurrente y compilado, desarrollado por los ingenieros de Google. Go vio la luz en el año 2009, esto hace a Go un lenguaje relativamente nuevo, pero que esto no nos engañe, Go es un lenguaje maduro, con el cual se han desarrollado miles de proyectos alrededor del mundo, inclusive, versiones actuales de Go están escritas con el mismo Go. 😎
Podemos hacer uso de Go si nos encontramos trabajando en Windows, MacOS y en ciertos sistemas GNU/Linux.
Ahora hablemos de su sintaxis. Desde mi punto de vista podemos ver la sintaxis de Go como una mezcla entre Python y C ¿No me crees? Veamos un par de ejemplos.
Aquí un clásico Hola mundo.
package main
import "fmt"
func main() {
fmt.Println("Hola, mundo.")
}
Ahora pasemos a algo un poco más complejo, tomate tu tiempo en analizar el siguiente código.
package main
func fibonacci() func() int {
x, y := 0, 1
return func() int {
x, y = y, x + y
return x
}
}
Go es un lenguaje de tipado estático, una vez declaremos el tipo de dato de nuestra variable, la variable no podrá cambiar de tipo en todo el programa, eso sí, en Go no es necesario definir el tipo, como lo podemos observar en la línea número cuatro, con las variables x y y. Tipificación dinámica, duck Typing 🦆
Algo que podemos observar es que con Go no haremos uso de punto y coma para terminar nuetras instrucciones, pero si haremos uso de llaves para crear bloques de código. Algo importante a mencionar es que Go es un lenguaje compilado, esto sin duda ayuda mucho al nivel de performance de nuestra aplicación.
Si hay algo en lo que Go sin duda destaca es en el tema de concurrencia. Sí, en otros lenguajes de programación también es posible trabajar con hilos, pero en Go sucede algo peculiar. En Go no existen los Threads perse, en lugar de ellos existen las goroutine, que son algo así como Threads ligeros. Con los goroutine y los canales podemos crear cientos de miles de "hilos" sin ningún problema. Esto hace a Go una excelente opción si lo que deseamos es optimizar la mayor cantidad de recursos posibles. Existen decenas de casos en los cuales empresas han dejado de utilizar x tecnología para comenzar a usar Go. Uno de los casos que más me agrada es el de Iron.io, en su arítulo nos cuentan como pasarón de tener 30 servidores con Ruby on Rails a tener unicamente 2 con Go (Concurrencia).
Go esta pensado para ser implementado en tareas las cuales no tengan mucha interacción con los usuarios, es más un lenguaje de sistemas que de aplicaciones. Un áreas muy recurrente en donde podemos implementar Go es del lado del servidor, ya sea que nuestro programa funcione como backend, como un microservicio o se encuentre realizando tareas un poco más complejas, tal ves, procesando datos. 🤷♀
Algo que me parece muy interesante, e importante a mencionar, es que Go admite la programación orientada a objetos, pero no de la forma tradicional que conocermos. Si bien podemos crear objetos (estructuras), definir atributos y métodos, con Go no podremos hacer uso de la herencia y el polimorfismo quedará delegado al uso de interfaces. Si vienes de un lenguaje orientado a objetos, como Java, es probable que te lleves un par de sorpresas. Veamos un ejemplo de programación orientada a objetos con Go.
package main
import(
"fmt"
)
type User struct {
Username string
Password string
}
func (user *User) login() {
fmt.Println("Prueba de login")
}
func main(){
user := &User{ "Username", "Password" }
user.login()
}
Otra de las principales caracteristicas de Go es que este no cuenta con excepciones, puesto en palabras de los desarrolladores: esto añade una complejidad incesaria al lenguaje y al entonor de ejecución. Así que mucho cuidado al programar en Go, hay que validar mucho si no queremos que nuestra programa se caiga. 😲
CONCLUSIÓN
Go es sin duda un lenguaje muy particular, la curva de aprendizaje, desde mi punto de vista, es relativamente baja. No lo recomiendo como primer lenguaje de programación, pero sí, para ser uno de los primeros.
Mi primera experiencia con Go fue dentro de un hackaton. Literalmente llegué al evento únicamente sabiendo declarar variables, nada más. A Pesar de mi nivel con lenguaje, creo que se hizo un excelente trabajo ya que el proceso de desarrollo es muy sencillo. Literalmente Go te hace escribir mejor código, por ejemplo, si declaras una variable o importar una librería la cual no usas no podrás compilar el proyecto, además, que la ausencia de ciertos mecanismos como el ciclo while, do while, entre otros, hacen que al programar en Go nos concentramos exclusivamente el proyecto, agilizando este proceso.
Bien, estas serían mis razones por las cuales te recomiendo aprender Go, échale un ojo, te aseguro no te arrepentiras. 😀😎