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 define simplemente por el lenguaje que utiliza. Sin embargo, la elección de un lenguaje y la forma en que se maneja pueden influir directamente en la mentalidad y la dirección de crecimiento de un desarrollador. En particular, comparar el lenguaje actual con otros lenguajes puede ser de gran ayuda para ampliar la perspectiva técnica y desarrollar un sentido de la esencia. En este artículo, intentaré explicar por qué elegí Go y cómo contribuye al crecimiento del desarrollador desde cinco perspectivas.

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

Existen numerosos lenguajes de programación en el mundo, y todos los lenguajes tienen ventajas y desventajas según sus características.

  • C permite un rendimiento excelente y un control de bajo nivel, pero el desarrollador debe gestionar la memoria directamente, carece de funciones de alto nivel, lo que resulta en baja productividad y dificultad de mantenimiento.
  • C++ y Rust admiten diversas funciones avanzadas como la programación orientada a objetos, las plantillas y la metaprogramación, pero su sintaxis es compleja, la curva de aprendizaje es pronunciada y la velocidad de compilación lenta los hace inadecuados para implementaciones repetitivas.
  • Java y C# ofrecen independencia de plataforma y estabilidad, siendo ampliamente utilizados en servicios a gran escala, pero se ejecutan en máquinas virtuales pesadas, lo que complica el entorno de implementación y ejecución, y eleva los requisitos de recursos.
  • Python y Javascript, gracias a su sintaxis concisa y su rico ecosistema, son adecuados para el desarrollo rápido, pero su rendimiento de ejecución es bajo y la fiabilidad del ecosistema es deficiente, lo que revela limitaciones estructurales en sistemas a gran escala.

En contraste, Golang es un lenguaje que logra un excelente equilibrio entre rendimiento y productividad. Go, al ser un lenguaje compilado como C, garantiza un alto rendimiento de ejecución, al tiempo que ofrece una flexibilidad de implementación a nivel de intérprete gracias a su rápida velocidad de compilación. Es decir, Go es un lenguaje equilibrado que puede utilizarse de manera estable en la mayoría de los entornos sin desventajas notables.

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

Durante la Segunda Guerra Mundial, los Aliados 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 habitantes vieron por primera vez aviones que transportaban ropa manufacturada, alimentos enlatados y otros artículos. Cuando terminó la guerra, las bases fueron abandonadas y los cargamentos dejaron de llegar. Por eso, los isleños, para imitar a los soldados, se vestían como controladores de tráfico aéreo, soldados o marineros, construían algo parecido a una pista de aterrizaje y enviaban señales de aterrizaje a los aviones con palos. Continuaron las marchas para que los cargamentos cayeran en paracaídas de los aviones. Pero los aviones que esperaban no llegaron.

La programación de culto al cargo se refiere a un hábito de desarrollo en el que se imita la apariencia del código o la tecnología sin comprender sus principios. Los desarrolladores modernos, especialmente en el campo del desarrollo web, suelen adoptar este hábito de seguir sin entender el significado. Gracias a frameworks como React, Next, Spring y Django, es posible desarrollar sin conocer la estructura interna, pero a menudo no se puede responder adecuadamente ni siquiera a un pequeño error. Además, con la reciente adición de herramientas de generación de código AI, se ha vuelto aún más común un enfoque de desarrollo en el que se copia y pega el resultado en lugar de escribir el código directamente o comprender los principios.

Go evita fundamentalmente este problema a nivel de filosofía del lenguaje. Go es un lenguaje diseñado en torno a la biblioteca estándar, no en torno a un framework. Los desarrolladores pueden construir un servidor web de nivel de servicio real utilizando solo bibliotecas básicas como net/http y database/sql, lo que les permite desarrollar intuitivamente una comprensión de las estructuras de bajo nivel como redes, bases de datos y E/S. Esta estructura, que permite adquirir una base sólida sin depender de frameworks, proporciona una base para que los desarrolladores continúen creciendo sin perder la esencia de la tecnología.

3. Go ofrece un potente modelo de concurrencia.

Las CPU modernas están evolucionando hacia la mejora del rendimiento mediante el uso de múltiples núcleos en paralelo, en lugar de aumentar la velocidad de un solo núcleo. En consecuencia, la concurrencia, que permite que un programa maneje múltiples tareas simultáneamente, se ha vuelto esencial, y la importancia de los lenguajes que pueden diseñar e implementar esto de manera eficiente está creciendo. Go es un lenguaje optimizado para este entorno. Las goroutines son hilos ligeros proporcionados por Go, que pueden crearse con solo unos pocos KB de pila y consumen muy pocos recursos del sistema incluso cuando se ejecutan miles de ellas simultáneamente. El tiempo de ejecución de Go distribuye eficientemente numerosas goroutines a los hilos del sistema operativo a través de su propio programador M:N, y este proceso se optimiza automáticamente sin la intervención directa del desarrollador. Esto permite a los desarrolladores diseñar lógica de concurrencia de manera segura y consistente, sin lógica de sincronización compleja o programación personalizada.

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

4. Go es un lenguaje creado por excelentes desarrolladores con una visión sólida.

Go es un lenguaje que nació bajo el liderazgo de Google y los legendarios desarrolladores 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. Además, 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, orientada a 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, Python experimentó una división del ecosistema durante años debido a la ruptura de la compatibilidad entre las versiones 2 y 3, y Java, después de la adquisición por parte de Oracle, vio un aumento en los casos en que las empresas dudaban en adoptarlo debido a políticas de licencia inestables. Además, Node.js todavía no ofrece un sistema de módulos consistente, con CJS y ESM coexistiendo.

Por el contrario, Go es un lenguaje que prioriza la coherencia y la estabilidad. El equipo de Go mantiene estrictamente la compatibilidad con versiones anteriores y, al introducir nuevas características, 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 limita la abstracción excesiva, impidiendo que el lenguaje 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 de desarrollo y estructura, y la potente y práctica biblioteca estándar soporta fielmente la mayoría de las funciones necesarias para el desarrollo práctico, como servidores web, procesamiento de archivos e interacción con bases de datos, sin necesidad de frameworks adicionales.

5. Gopher es lindo.

Gopher1

Gopher2

Gopher3