Si hablaramos de uno de los lenguajes de programación más importantes del Backend, sin duda podriamos hablar de Go. Gracias a Go se han creado herramientas muy importante de la nube y es un lenguaje muy utilizado en la creación de aplicaciones Backend a Gran escala por parte de empresas muy importantes.
Asi que en este articulo te daré un resumen de los puntos más relevantes del lenguaje, y porque podriamos considerarlo una opcion si te interesa especializarte en el desarrollo web backend.
Primer veamos que es Go.
¿Qué es Go?
Go es un lenguaje de programación que fue creado en Google alrededor del año 2007, y anunciado como un lenguaje Open Source en el año 2012, llegando con su version 1.0.
Lo interesante de Go, es que a diferencia de muchos otros lenguajes de proposito general, Go fue desarrollado con la idea de poder se utilizado en entornos distribuidos dentro de Google, es decir su proposito fue ser un lenguaje que resolviera los grandes problemas de la nube de Google.
Antes de Go, Google tenia muchos servidores creados en C++, Java, y Python, pero el desarrollo se tornaba lento, y dificil de mantener, asi que decidieron crear un lenguaje nuevo que tenga las mejores caracteristicas de estos, como la rapidez de C++ y la facilidade de la sintaxis de Python.
Todo esto con el proposito que los desarrolladores tuvieran un entorno Eficiente y Simple.
esto tambien significo que la creacion del lenguaje no fue por aspectos teoricos sino practicos. En palabras de uno de sus cradores (Rob Pike):
Go trata más acerca de Ingenieria de Software que en investigación de Lenguajes de programacion.
Go is more about software engineering than programming language research.
El lenguaje fue pensando con estos puntos claves a resolver:
- Compilaciones lentas (builds lentos)
- dependencias no controladas
- Cada programador usando un lenguaje subconjunto distinto
- programas dificiles de entender (codigo ilegible, probremente documentado, y asi)
- Duplicacion de esfuerzo, diferentes lenguajes que no soportaban las misma bibliotecas tenian que recrearse en otro lenguaje
- Actualizaciones costosas
- Incompatibilidad de versiones (version skew)
- Dificultad para escribir herramientas de automatización
- compilacion a distintas plataformas (cross-platform build)
Y Los que tuvieron la responsabilidad de reolver eto fueron cientificos de la computacion bastante importantes
Los Creadores de Go
Entre los desarrolladores del lenguaje Go podemos encontrar a Ken Thompson, el creador del lenguaje B (predecesor del Lenguaje C), Rob Pike, que junto a Ken Thompson crearon el sistema operativo [UNIX], y Robert Griesemer, que antes trabajaba en proyectos como en el desarrollo del motor V8 de Google.
Y Como resultado de todo esto tuvimos el lenguaje Go.
Que entre tus caracteristicas podemos encontrar que:
Go es Compilado
Go es un lenguaje compilado, lo que significa que cuando terminas de escribir codigo y quieres generar tu programa (go build
), el compilador de Go, convierto todo tu código a código maquina (Machine Code), que en la practica es un solo ejecutable que no necesita dependencias extras.
Lo que permite generar programas portatiles (Windows, Linux y Mac), y que son mucho más rapidos que los programas creados en lenguajes interpretados (Javascript, Python, PHP, etc)
Go es de Tipado Estatico
Go es de tipado estatico y fuertemente tipado, lo que quiere decir que vas a tener que declarar los tipos de datos en variables y obtendras errores en tiempo de compilacion:
tambien ofrece inferencia de tipos de datos lo que hace al lenguaje muy facil de leer y bastante compacto, por ejemplo esto es lo mismo que lo anterior
Go Packages
Y Al igual que muchos entornos de desarrollo moderno de otros lenguajes, Go viene con una sistema para administrar paquetes y modulos lo que permite facilmente añadirm,exportar y hacer seguimiento de los paquetes que necesitan tus programas, lo que seria equivalente a administradores de paquetes como pip en Python, npm en Node, composer en php, y así.
El lenguaje tambien viene con una enorme cantidad de paquetes estandar (Standard Library) que permiten añadir funcionalidades relacionadas como:
- Red (net)
- Seguridad (crypto)
- matematica (Math)
- Testing
- I/O
- HTML Templates (Go templates).
Por mencionar algunos. Puedes desarrollar aplicaciones completos solo usando la biblioteca estandar.
Aunque si no es suficiente para crear tu aplicacion hay modulos de la comunidad que puedes descargar directamente desde Github y encontrar sus documentaciones en sistios como pkg.go.dev lo que te permitira añadir frameworks, drivers de bases de datos, etc.
Compilaciones Rápidas
Otra caracteristica, que es ofrece tiempo de compilación rápido, gracias a innovaciones como el analisis de dependencias,
Go Soporta concurrencia
Go tambien ofrece soporte a concurrencia gracias a sus Goroutines, las cuales son funcione que pueden ejecutarse al mismo tiempo que otras funciones, hacieno uso de multiples Hilos del CPU.
GO punteros
tambien permite administra la memoria a traves de Punteros, aunque no usa punteros aritemticos como en el lenguaje C, a menos que uses sintaxis insegura (unsafe) lo que pueden generar fallos de seguridad y bugs.
Esto es posible gracia a que el lenguaje ha sido diseñado en una epoca donde los procesaadores multinucleos son algo muy comun. Haciendolo una opcion fuerte en arquitecturas de Microservicio.
Go es ampliamente Usado
Go es muy utilizado en proyectos Backend grandes, por empresas como Google, Paypal, Dropbox, Twitter, Meta, Soundcloud, y muchas otras.
Go, orientacion a Objetos o funcional?
Ahora recuerda que te mencione que Go no esta pensado en aspectos teoricos de investigacion de lenguajes sino más en sentido practico.
Bueno, esto lo notaras en la sintaxis del lenguaje, ya que no encontraras clases, o herencia, lo que singifica que en el sentido estrico no es un lenguaje orientado a Objetos, aunque usando sus structs e interfaces, puedes llegar a tener un paradigma algo similar.
Y aunque veas funciones anonimas (lambda functions),y first-class functions, que vienen de programacion funcional tampoco es un lenguaje funcional.
Es decir go es más similar a un lenguaje proceduarl como C.
¿Que se puede crear en Go?
Con Go se han creado software como Docker y Kubernetes que son herramientas principales de contenerizacion de aplicaciones en la nube, o Proyectos como Crockroachdb que es una base de datos SQL distribuida creada en GO. E incluso tambien puedes ver herramientas de alto nivel desarrollados encima de este lenguaje, como por ejemplo:
- esbuild el cual es un builder de proyectos de Javascript que permite transpilar código muy rapido, siendo la base de proyectos como Vitejs
- Pocketbase, que es un ejecutable creado en Go, que te permite tener una especie de Backend as a Service como Firebase.
- [Wails], un proyecto que te permite crear aplicaciones desktop usando go para comunicarse con el sistema operativo y Frameworks de Frontend para desarrollar interfaces Graficas.
Ahora muy aparte de todo esto que puede ser obtenido en otros lenguajes, Go tiene algunas caracteristicas que lo hacen unico, lo primero son sus tiepos de compilacion rapido
Conclusion
En fin, Go es una muy buena opcion para aquelloso proyectos que se requiera velocidades altas sin sacrificar la experiencia de desarrollo.
Cuando estudias Go, quizas en ocasiones sientas que estas escribiendo un lenguaje interpretado, o una especie de C más simple, pero con modulos similares a lenguajes de programacion de alto nivel.
Si quieres enfocarte en el desarrollo backend usando un lenguaje con sintaxis y herramientas moderna, ademas de tener demandada, este puede ser una buena opcion.
O si vienes de lenguajes fuertemente tipados como Java, C#, y buscas un lenguaje más simple, pero igual de eficiente, Go seria una ruta más sencilla que ir por lenguajes de Scripting como Python o Javascript.
Aun así, como ya deberias saber no hay ningun lenguaje que sea bueno para todas las tareas, asi que depende del desarrollador poner en la mesa sus opciones y partir desde alli.
¿Golang?
Por cierto el lenguaje a veces vas a escuchar que es llamado Golang,
![]
Recursos
https://www.freecodecamp.org/news/what-is-go-programming-language/
https://www.techtarget.com/searchitoperations/definition/Go-programming-language