Aquí hay algunas ventajas sorprendentes de Go de las que no se ha oído hablar mucho

En este artículo, explico por qué debería darle una oportunidad a Go y por dónde empezar.

Golang es un lenguaje de programación del que quizás hayas oído hablar mucho durante los últimos años. A pesar de que se creó en 2009, ha comenzado a ganar popularidad solo en los últimos años.

Este artículo no trata sobre los principales puntos de venta de Go que suele ver.

En cambio, me gustaría presentarte algunas características bastante pequeñas pero aún significativas que solo conocerás después de que hayas decidido probar Go.

Estas son características sorprendentes que no se presentan en la superficie, pero pueden ahorrarle semanas o meses de trabajo. También pueden hacer que el desarrollo de software sea más agradable.

No se preocupe si Go es algo nuevo para usted. Este artículo no requiere experiencia previa con el idioma. He incluido algunos enlaces adicionales en la parte inferior, en caso de que desee aprender un poco más.

Pasaremos por temas como:

  • GoDoc
  • Análisis de código estático
  • Marco de prueba y creación de perfiles integrado
  • Detección de condición de carrera
  • Curva de aprendizaje
  • Reflexión
  • Opinión
  • Cultura

Tenga en cuenta que la lista no sigue ningún orden en particular. También tiene opiniones como el infierno.

GoDoc

La documentación en código se toma muy en serio en Go. También lo es la simplicidad.

GoDoc es una herramienta de análisis de código estático que crea hermosas páginas de documentación directamente de su código. Una característica notable de GoDoc es que no utiliza lenguajes adicionales, como JavaDoc, PHPDoc o JSDoc para anotar construcciones en su código. Solo inglés.

Utiliza toda la información que puede obtener del código para delinear, estructurar y formatear la documentación. Y tiene todas las comodidades, como referencias cruzadas, ejemplos de código y enlaces directos al repositorio del sistema de control de versiones.

Todo lo que puede hacer es agregar un buen // MyFunc transforms Foo into Bartipo de comentario antiguo que también se reflejaría en la documentación. Incluso puede agregar ejemplos de código que realmente se pueden ejecutar a través de la interfaz web o localmente.

GoDoc es el único motor de documentación de Go que utiliza toda la comunidad. Esto significa que todas las bibliotecas o aplicaciones escritas en Go tienen el mismo formato de documentación. A la larga, le ahorra mucho tiempo mientras navega por esos documentos.

Aquí, por ejemplo, está la página de GoDoc para mi proyecto favorito reciente: pullkee - GoDoc.

Análisis de código estático

Go se basa en gran medida en el análisis de código estático. Los ejemplos incluyen godoc para documentación, gofmt para formato de código, golint para linting de estilo de código y muchos otros.

Hay tantos de ellos que incluso hay un tipo de proyecto con todo incluido llamado gometalinter para componerlos todos en una sola utilidad.

Esas herramientas se implementan comúnmente como aplicaciones de línea de comandos independientes y se integran fácilmente con cualquier entorno de codificación.

El análisis de código estático no es en realidad algo nuevo en la programación moderna, pero Go lo lleva a lo absoluto. No puedo sobrestimar cuánto tiempo me ahorró. Además, le da una sensación de seguridad, como si alguien estuviera cubriendo su espalda.

Es muy fácil crear sus propios analizadores, ya que Go tiene paquetes integrados dedicados para analizar y trabajar con fuentes de Go.

Puede obtener más información de esta charla: GothamGo Kickoff Meetup: Go Static Analysis Tools por Alan Donovan.

Marco de prueba y creación de perfiles integrado

¿Alguna vez ha intentado elegir un marco de prueba para un proyecto de Javascript que está comenzando desde cero? Si es así, es posible que comprenda la lucha de pasar por tal parálisis de análisis. Es posible que también se haya dado cuenta de que no estaba utilizando como el 80% del marco que ha elegido.

El problema se repite una vez que necesita realizar un perfil confiable.

Go viene con una herramienta de prueba incorporada diseñada para brindar simplicidad y eficiencia. Le proporciona la API más simple posible y hace suposiciones mínimas. Puede usarlo para diferentes tipos de pruebas, creación de perfiles e incluso para proporcionar ejemplos de código ejecutable.

Produce una salida compatible con CI lista para usar, y el uso suele ser tan fácil como ejecutar go test. Por supuesto, también admite funciones avanzadas como ejecutar pruebas en paralelo, marcarlas como omitidas y muchas más.

Detección de condición de carrera

Es posible que ya conozca las Goroutines, que se utilizan en Go para lograr la ejecución simultánea de código. Si no lo hace, aquí hay una explicación muy breve.

La programación simultánea en aplicaciones complejas nunca es fácil, independientemente de la técnica específica, en parte debido a la posibilidad de condiciones de carrera.

En pocas palabras, las condiciones de carrera ocurren cuando varias operaciones simultáneas terminan en un orden imprevisto. Podría dar lugar a una gran cantidad de errores, que son particularmente difíciles de detectar. ¿Alguna vez pasó un día depurando una prueba de integración que solo funcionó en aproximadamente el 80% de las ejecuciones? Probablemente fue una condición de carrera.

Dicho todo esto, la programación concurrente se toma muy en serio en Go y, afortunadamente, tenemos una herramienta bastante poderosa para cazar esas condiciones de carrera. Está completamente integrado en la cadena de herramientas de Go.

Puede leer más sobre él y aprender a usarlo aquí: Presentamos el detector Go Race - The Go Blog.

Curva de aprendizaje

Puede aprender las funciones de idiomas de ALL Go en una noche. Lo digo en serio. Por supuesto, también existe la biblioteca estándar y las mejores prácticas en diferentes áreas más específicas. Pero dos horas sería suficiente tiempo para que pueda escribir con confianza un servidor HTTP simple o una aplicación de línea de comandos.

El proyecto tiene una documentación maravillosa y la mayoría de los temas avanzados ya se han cubierto en su blog: The Go Programming Language Blog.

Go es mucho más fácil de llevar a su equipo que Java (y la familia), Javascript, Ruby, Python o incluso PHP. El entorno es fácil de configurar y la inversión que debe realizar su equipo es mucho menor antes de que puedan completar su primer código de producción.

Reflexión

La reflexión de código es esencialmente una capacidad para infiltrarse bajo el capó y acceder a diferentes tipos de metainformación sobre las construcciones de su lenguaje, como variables o funciones.

Dado que Go es un lenguaje de tipo estático, está expuesto a varias limitaciones cuando se trata de una programación abstracta de tipo más flexible. Especialmente en comparación con lenguajes como Javascript o Python.

Además, Go no implementa un concepto llamado Genéricos, lo que dificulta aún más trabajar con varios tipos de forma abstracta. Sin embargo, mucha gente piensa que en realidad es beneficioso para el idioma debido a la cantidad de complejidad que aportan los genéricos. Y estoy totalmente de acuerdo.

De acuerdo con la filosofía de Go (que es un tema separado en sí mismo), debe esforzarse por no diseñar demasiado sus soluciones. Y esto también se aplica a la programación de tipo dinámico. Apéguese a los tipos estáticos tanto como sea posible y use interfaces cuando sepa exactamente con qué tipo de tipos está tratando. Las interfaces son muy poderosas y ubicuas en Go.

Sin embargo, todavía hay casos en los que no es posible saber a qué tipo de datos se enfrenta. Un gran ejemplo es JSON. Convierte todo tipo de datos de un lado a otro en sus aplicaciones. Cadenas, búferes, todo tipo de números, estructuras anidadas y más.

Para lograrlo, necesita una herramienta para examinar todos los datos en tiempo de ejecución que actúe de manera diferente según su tipo y estructura. ¡Reflexión para rescatar! Go tiene un paquete reflect de primera clase para permitir que su código sea tan dinámico como lo sería en un lenguaje como Javascript.

Una advertencia importante es saber qué precio paga por usarlo, y usarlo solo cuando no haya una forma más sencilla.

Puede leer más sobre esto aquí: Las leyes de la reflexión - El blog de Go.

También puede leer código real de las fuentes del paquete JSON aquí: src / encoding / json / encode.go - Código fuente

Opinión

¿Existe tal palabra, por cierto?

Viniendo del mundo de Javascript, uno de los procesos más abrumadores que enfrenté fue decidir qué convenciones y herramientas necesitaba usar. ¿Cómo debo diseñar mi código? ¿Qué biblioteca de pruebas debo usar? ¿Cómo debo abordar la estructura? ¿En qué paradigmas y enfoques de programación debo confiar?

Lo que a veces básicamente me atascó. Estaba haciendo esto en lugar de escribir el código y satisfacer a los usuarios.

Para empezar, debo señalar que entiendo totalmente de dónde deberían provenir esas convenciones. Siempre eres tú y tu equipo. De todos modos, incluso un grupo de desarrolladores experimentados de Javascript puede encontrarse fácilmente con la mayor parte de la experiencia con herramientas y paradigmas completamente diferentes para lograr los mismos resultados.

Esto hace que la nube de parálisis de análisis explote sobre todo el equipo y también dificulta que las personas se integren entre sí.

Bueno, Go es diferente. Solo tienes una guía de estilo que todos siguen. Solo tiene un marco de prueba que está integrado en la cadena de herramientas básica. Tiene muchas opiniones sólidas sobre cómo estructurar y mantener su código. Cómo elegir nombres. Qué patrones de estructuración seguir. Cómo mejorar la concurrencia.

Si bien esto puede parecer demasiado restrictivo, le ahorra mucho tiempo a usted y a su equipo. Ser algo limitado es realmente una gran cosa cuando estás codificando. Le brinda un camino más sencillo a la hora de diseñar un nuevo código y hace que sea más fácil razonar sobre el existente.

Como resultado, la mayoría de los proyectos de Go se parecen mucho en código.

Cultura

La gente dice que cada vez que aprendes un nuevo idioma hablado, también te sumerges en alguna parte de la cultura de las personas que hablan ese idioma. Por lo tanto, cuantos más idiomas aprenda, más cambios personales puede experimentar.

Lo mismo ocurre con los lenguajes de programación. Independientemente de cómo vaya a aplicar un nuevo lenguaje de programación en el futuro, siempre le brinda una nueva perspectiva sobre la programación en general o sobre algunas técnicas específicas.

Ya sea programación funcional, coincidencia de patrones o herencia de prototipos. Una vez que lo haya aprendido, podrá llevar consigo estos enfoques que amplían el conjunto de herramientas de resolución de problemas que tiene como desarrollador de software. También cambia la forma en que ve la programación de alta calidad en general.

And Go es una excelente inversión aquí. El pilar principal de la cultura de Go es mantener un código simple y realista sin crear muchas abstracciones redundantes y colocar la capacidad de mantenimiento en la parte superior. También es parte de la cultura pasar la mayor parte del tiempo trabajando en la base de código, en lugar de jugar con las herramientas y el entorno. O elegir entre diferentes variaciones de esos.

Go también se trata de "solo debe haber una forma de hacer las cosas".

Una pequeña nota al margen. También es parcialmente cierto que Go generalmente se interpone en su camino cuando necesita construir abstracciones relativamente complejas. Bueno, yo diría que esa es la compensación por su simplicidad.

Si realmente necesita escribir mucho código abstracto con relaciones complejas, sería mejor que utilizara lenguajes como Java o Python. Sin embargo, incluso cuando no es obvio, rara vez es el caso.

¡Utilice siempre la mejor herramienta para el trabajo!

Conclusión

Es posible que haya oído hablar de Go antes. O tal vez es algo que ha estado fuera de su radar por un tiempo. De cualquier manera, lo más probable es que Go pueda ser una opción muy decente para usted o su equipo al comenzar un nuevo proyecto o mejorar el existente.

Esta no es una lista completa de todas las cosas asombrosas de Go. Solo los infravalorados .

Por favor, pruebe Go con A Tour of Go, que es un lugar increíble para comenzar.

Si desea obtener más información sobre los beneficios de Go, puede consultar estos enlaces:

  • ¿Por qué debería aprender Go? - Keval Patel - Medio
  • Adiós Node.js - TJ Holowaychuk - Medio

¡Comparta sus observaciones en los comentarios!

Incluso si no está buscando específicamente un nuevo idioma para usar, vale la pena dedicar una o dos horas a familiarizarse con él. Y tal vez pueda resultarle bastante útil en el futuro.

¡Busca siempre las mejores herramientas para tu oficio!

Si te gusta este artículo, considera seguirme para obtener más información y hacer clic en esas divertidas manitas verdes justo debajo de este texto para compartir. ???

¡Echa un vistazo a mi Github y sígueme en Twitter!