Go es un lenguaje maravilloso para escribir servicios web, debido a sus hilos livianos, modularidad y excelente integración con otros servicios.
Como antecedentes, actualmente estoy escribiendo un servicio web en Go que se acerca a las 4000 líneas de código. Antes de comenzar a usar Go, usaba C ++ y Python para la mayoría de mis proyectos.
Goroutines
Los grandes servidores web deben ejecutar miles de tareas concurrentes.
- ¿Cuál es el mejor sitio web para aprender J2EE de la noche a la mañana?
- Estamos buscando lanzar una aplicación en Salesforce AppExchange. ¿Alguna idea sobre los precios y cómo aparecer como una aplicación destacada?
- ¿Cuáles son los buenos marcos para la colaboración en tiempo real en una aplicación web?
- ¿Qué empresa ofrece desarrollo de aplicaciones web en Bangalore?
- ¿Cuánto dinero gana un consultor / freelance decente de django?
Una de las características definitorias del lenguaje de programación Go es que
La concurrencia está integrada en el lenguaje de programación.
Goroutines, hilos livianos, permiten al desarrollador realizar múltiples funciones al mismo tiempo, como una línea de ensamblaje. Estos son muy útiles para los servidores web; por ejemplo, cuando alguien se conecta a mi servidor, acabo de generar una nueva rutina para manejar ese cliente. También es increíblemente fácil hacerlo, solo con el prefijo de una llamada a la función con la palabra clave `go`.
Soy consciente de que muchos otros idiomas admiten el subprocesamiento múltiple, pero la implementación de goroutines de Go hace que la administración de estos hilos sea increíblemente fácil.
Modularidad
Los servicios web grandes con una gran base de código deben mantenerse y mejorarse en partes discretas y organizadas.
Una de las características de Go que más disfruto es lo fácil que es desarrollar una aplicación grande al modularizar su código.
Aunque estoy escribiendo casi 4000 líneas de código Go para esta aplicación, no parece un montón de código gigante que está unido con cinta adhesiva. En cambio, se siente casi como una sinfonía, con cada función realizando su parte.
La depuración en go es muy eficiente, porque la modularidad le ayuda a saber dónde ubicar y resolver su problema. Esto se debe a que todas las declaraciones relevantes de función, constante, variable y tipo se mantienen en lugares predecibles . Aunque algunos desarrolladores que provienen de lenguajes de programación más tradicionales argumentan cómo esto podría limitar su estilo de libertad de código, en mi opinión, es mucho mejor simplemente seguir lo que funciona .
La mejor parte es que gran parte de esta organización es manejada automáticamente por la herramienta `go fmt`. Al llamar a esta herramienta en su código, formatea su código automáticamente según las especificaciones de Go acordadas: yo personalmente uso el paquete GoSublime de Sublime Text, así que esto se hace cada vez que guardo el archivo 🙂 La otra organización viene de seguir las mejores prácticas de Go en documentando su código.
Además, tengo que mencionar el sistema de compilación de paquetes de Go. En lugar de buscar en cada biblioteca importada e importar las dependencias para cada biblioteca, construye cada paquete importado en un solo ejecutable que se puede importar directamente . Para ilustrar mi punto, si está utilizando los paquetes A y B, que ambos llaman paquete C, el paquete C solo necesita construirse una vez (en lugar de que el código se importe e incorpore en cada paquete por separado). Esto permite tiempos de construcción increíblemente rápidos. Otra gran ventaja para usar Go.
Integración con software de terceros / incorporados
Los servicios web necesitan realizar una gran cantidad de funciones. No quieres escribir todo ese código tú mismo.
Afortunadamente, Go interactúa bastante bien con herramientas comunes a través de bibliotecas integradas o de terceros. Estos son los ejemplos más notables de servicios con los que interactúa mi servicio web:
Builtins
- Bibliotecas de criptografía (RSA, AES, generación de números aleatorios con seguridad criptográfica)
- Protocolos web seguros (TLS y SSL)
- Servidor HTTP (¡con plantillas HTML!)
Tercero
- MongoDB
- Amazon S3
Afortunadamente, todas estas funcionalidades están habilitadas por bibliotecas en línea gratuitas que están completamente documentadas. Aunque puedo entender cómo algunos desarrolladores estarían preocupados por la falta de bibliotecas en Go porque todavía es un lenguaje de programación relativamente joven (lanzado en 2009), personalmente no he encontrado que esto sea un problema en absoluto.
Dado que el producto final de una aplicación Go es un ejecutable binario, puede integrarse en una amplia variedad de aplicaciones y entornos. Por ejemplo, estoy usando un binario escrito en Go como back-end para una aplicación Mac OSX que usa frameworks Cocoa.
En general, he ganado un inmenso respeto por Go, especialmente al escribir servicios web.