GoSuda

¿Por qué el lenguaje Go?

By Rabbit Princess
views ...

서론

Los lenguajes de programación son herramientas para crear productos. El nivel de habilidad de un desarrollador no se determina simplemente por el lenguaje que utiliza. Sin embargo, la elección y el manejo de un lenguaje pueden influir directamente en la forma de pensar y en la dirección de crecimiento del desarrollador. En particular, comparar el lenguaje que se utiliza actualmente con otros lenguajes es de gran ayuda para ampliar la visión técnica y cultivar un sentido de la esencia. En este artículo, intentaré explicar por qué elegí Go y cómo ayuda al crecimiento del desarrollador, dividiéndolo en cinco aspectos.

1. Go es un lenguaje que equilibra rendimiento y productividad.

Existen numerosos lenguajes de programación en el mundo, y cada uno tiene sus pros y sus contras según sus características.

  • C permite un rendimiento sobresaliente y control de bajo nivel, pero el desarrollador debe gestionar la memoria directamente, y la falta de funcionalidades de alto nivel resulta en baja productividad y dificultad de mantenimiento.
  • C++ y Rust admiten diversas funcionalidades avanzadas como la orientación a objetos, los templates y la metaprogramación, pero su sintaxis es compleja, la curva de aprendizaje es pronunciada y su lenta velocidad de compilación los hace inadecuados para la implementación repetitiva.
  • Java y C# se utilizan ampliamente en servicios a gran escala porque ofrecen independencia de plataforma y estabilidad, pero se ejecutan en una máquina virtual pesada, lo que complica los entornos de implementación y ejecución y aumenta los requisitos de recursos.
  • Python y Javascript son adecuados para el desarrollo rápido gracias a su sintaxis concisa y su rico ecosistema, pero su rendimiento de ejecución es bajo y la baja fiabilidad de su ecosistema revela limitaciones estructurales en sistemas a gran escala.

Por otro lado, Golang es un lenguaje que presenta un excelente equilibrio entre rendimiento y productividad. Go, al ser un lenguaje compilado como C, garantiza un alto rendimiento de ejecución y, al mismo tiempo, ofrece la flexibilidad de implementación a nivel de intérprete gracias a su rápida velocidad de compilación. En otras palabras, Go es un lenguaje equilibrado que puede utilizarse de manera estable en la mayoría de los entornos sin desventajas evidentes.

2. Go previene la programación de culto al cargo.

Durante la Segunda Guerra Mundial, las fuerzas aliadas construyeron bases aéreas en islas del Pacífico para apoyar la guerra. La gran cantidad de suministros y equipos militares cambió drásticamente la vida de los soldados y los nativos. Los residentes vieron por primera vez aviones que transportaban ropa manufacturada, alimentos enlatados y otros artículos. Cuando terminó la guerra, las bases fueron abandonadas y la carga dejó de llegar. Entonces, los isleños, para imitar a los soldados, se vestían como controladores de tráfico aéreo, soldados o marineros, creaban algo parecido a una pista de aterrizaje y usaban palos para enviar señales de aterrizaje a los aviones. Continuaron con estas marchas con la esperanza de que la carga cayera en paracaídas desde los aviones. Sin embargo, los aviones que esperaban nunca llegaron.

La programación de culto al cargo se refiere al hábito de desarrollo de imitar solo la apariencia de un código o tecnología sin comprender sus principios subyacentes. Este tipo de hábito de seguir sin comprender el significado es común entre los desarrolladores modernos, especialmente en el campo del desarrollo web. Aunque frameworks como React, Next, Spring y Django han hecho posible el desarrollo sin conocer la estructura interna, a menudo no se puede responder adecuadamente a un pequeño error. Además, con la reciente incorporación de herramientas de generación de código por IA, el método de desarrollo de copiar y pegar resultados en lugar de escribir código directamente o comprender el principio se ha vuelto aún más generalizado.

Go evita fundamentalmente este problema a nivel de filosofía del lenguaje. Go es un lenguaje diseñado centrado en la biblioteca estándar, no en el framework. Los desarrolladores pueden construir un servidor web a nivel de servicio real utilizando solo bibliotecas básicas como net/http, database/sql, lo que naturalmente fomenta la intuición y la comprensión de estructuras de bajo nivel como redes, bases de datos y I/O. Esta estructura, que permite adquirir una base sólida desde los fundamentos sin depender de frameworks, se convierte en la base para que el desarrollador no pierda la esencia de la tecnología y pueda crecer continuamente.

3. Go ofrece un potente modelo de concurrencia.

Las CPU modernas están evolucionando en la dirección de mejorar el rendimiento utilizando múltiples cores en paralelo, en lugar de aumentar la velocidad de un solo core. En consecuencia, la concurrencia, que permite que un solo programa procese múltiples tareas simultáneamente, se ha convertido en una necesidad, y la importancia de los lenguajes que pueden diseñarla e implementarla de manera eficiente también está creciendo. Go es un lenguaje optimizado para este entorno. La goroutine es un hilo ligero proporcionado por Go, que se puede crear con solo unos pocos KB de stack y consume muy pocos recursos del sistema incluso si se ejecutan miles simultáneamente. El runtime de Go distribuye eficientemente numerosas goroutines en hilos del OS a través de su propio M:N scheduler, y este proceso se optimiza automáticamente sin la intervención directa del desarrollador. Esto permite al desarrollador diseñar lógica de concurrencia de manera segura y consistente, sin lógica de sincronización compleja o custom scheduling.

Además, Go apoya activamente el diseño moderno de concurrencia utilizando herramientas de sincronización como mutex, waitGroup, y channel, context. Gracias a esta estructura, el desarrollador puede adquirir un sentido práctico de la concurrencia y el paralelismo de forma natural sin enredarse en teorías complejas, y puede alcanzar un alto nivel de abstracción y capacidad de diseño utilizable desde cero.

4. Go es un lenguaje creado y centrado por excelentes desarrolladores.

Go es un lenguaje que surgió bajo el liderazgo de Google y desarrolladores legendarios como Robert Griesemer, Rob Pike y Ken Thompson. En particular, estos son los fundadores de Unix y el lenguaje C, y maestros en los campos de los compiladores y el software de sistemas, lo que por sí mismo demuestra la fiabilidad técnica de Go. Con la incorporación de la experiencia práctica y el conocimiento operativo de servicios a gran escala de numerosos ingenieros de Google, Go ha evolucionado desde el principio con una filosofía y dirección consistentes, buscando la resolución de problemas reales.

Otros lenguajes a menudo causan confusión en la comunidad y entre los usuarios debido a la ruptura de la compatibilidad, cambios de diseño, licencias inestables y ecosistemas no estandarizados. Por ejemplo, la incompatibilidad entre Python 2 y 3 dividió el ecosistema durante años, y el caso de Java, tras la adquisición por parte de Oracle, las políticas de licencias se volvieron inestables, lo que ha llevado a que las empresas sean reacias a su adopción. Además, Node.js todavía no proporciona un sistema de módulos consistente, ya que CJS y ESM coexisten.

Por otro lado, Go es un lenguaje que prioriza la consistencia y la estabilidad como valores fundamentales. El equipo de Go mantiene rigurosamente la compatibilidad con versiones anteriores y, al introducir nuevas funcionalidades, se adhiere a un método de integración gradual para evitar conflictos con el código existente. La sintaxis también evita palabras clave innecesarias y restringe la abstracción excesiva, previniendo que el lenguaje en sí se vuelva innecesariamente complejo. Además, la toolchain oficial consistente como go fmt, go mod, go build, go test induce a que todos los proyectos Go tengan el mismo entorno y estructura de desarrollo, y la potente y práctica biblioteca estándar soporta fielmente la mayoría de las funcionalidades necesarias para el desarrollo práctico, como servidores web, procesamiento de archivos e interconexión de bases de datos, incluso sin un framework separado.

5. Gopher es lindo.

Gopher1

Gopher2

Gopher3